簡介:隨著java5的推出,加上當年基於純java annotation的依賴注入框架Guice的出現,spring推出並持續完善了基於java代碼和annotation元信息的依賴關系綁定描述方法,即javaconfig項目
基於javaconfig方式的依賴關系綁定描述基本上映射了最早的基於XML的配置方式
一、表達形式層面
基於xml的配置方式是這樣的
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd >
<!- bean定義 ->
</beans>
而基於javaconfig的配置方式是這樣的
@configuration
public class MockConfiguration{
//bean定義
}
任何一個標注了@configuration的java類定義都是一個javaconfig的配置類
二、1.注冊bean定義層面基於xml的配置方式是這樣的
<bean id="mockService" class="...MockServiceImpl">
...
</bean>而基於javaconfig的配置方式是這樣的
@configuration
public class MockConfiguration{
@Bean
public MockService mockService(){
return new MockServiceImpl():
}
}
任何一個標注了@Bean的方法,其返回值將作為一個bean定義注冊到Spring的IoC容器,方法 名將默認成為該bean定義的id。
2.批量定義注冊bean基於xml的配置方式是這樣的
<context:component-scan base-package="..."/>
配合@Component和@Repository等,將標注了這些元信息annotation的bean定義類批量采集到spring的IoC容器中而基於javaconfig的配置方式是這樣的
@ComponentScan(String[] basePackages)
注:@ComponentScan是springboot框架一個關鍵組件
四、表達依賴注入關系層面基於xml的配置方式是這樣的
<bean id="mockService" class="...MockServiceImpl">
<property name="dependencyService" ref="dependencyService">
</bean>
<bean id="dependencyService" class="...dependencyServiceImpl"/>
而基於javaconfig的配置方式是這樣的
@configuration
public class MockConfiguration{
@Bean
public MockService mockService(){
return new MockServiceImpl(dependencyService()):
}
@Bean
public DependencyService dependencyService(){
return new DependencyServiceImpl():
}
}
如果一個bean依賴其他bean,則直接調用對應javaconfig類中依賴bean的創建方法就可以了