Spring提供三种Bean的装配方式,分别是: 1. 自动装配Bean 2. 在Java中装配Bean 3. 在XML中装配Bean
Spring从两个角度完成Bean的自动化装配: - 组件扫描:扫描上下文中所有的Bean(由@Component、@Named注解完成) - 自动装配:将指定的Bean注入到指定的Bean中(由@Autowired、@Injected注解完成)
<context:component-scan base-package="xxx.xxx.xxx">
@Component
class xxx{}
PS:也可使用@Inject注解,和@Named一样,都是Java依赖注入规范的注解,Spring实现了这些注解。
@Configuration
class XXXConfig{
// 创建一个Bean
@Bean
public A setA(){
return new A();
}
}
@Configuration
class XXXConfig{
@Bean
public A setA(){
return new A();
}
// 注入方式一:执行setA函数(low比)
@Bean
public B setB(){
return new B( setA() );
}
// 注入方式二:Spring自动注入(优雅)
@Bean
public B setB( A a ){
return new B( a );
}
}
<bean id="xxx" class="com.xxx.xxx" />
<!-- 注入引用 -->
<bean id="xxx" class="com.xxx.xxx">
<constructor-arg ref="yyy" />
</bean>
<!-- 注入字面值 -->
<bean id="xxx" class="com.xxx.xxx">
<constructor-arg value="我是字面值" />
</bean>
<!-- 注入集合 -->
<bean id="xxx" class="com.xxx.xxx">
<constructor-arg>
<list>
<value>啦啦啦1</value>
<value>啦啦啦2</value>
<value>啦啦啦3</value>
</list>
</constructor-arg>
</bean>
<bean id="xxx" class="com.xxx.xxx">
<constructor-arg>
<list>
<ref bean="xxx1" />
<ref bean="xxx2" />
<ref bean="xxx3" />
</list>
</constructor-arg>
</bean>
<!-- 注入引用(若构造函数有多个参数) -->
<bean id="xxx" class="com.xxx.xxx" c:参数名-ref="yyy"/>
<!-- 注入引用(指定注入到第几个参数中) -->
<bean id="xxx" class="com.xxx.xxx" c:0-ref="yyy"/>
<!-- 注入引用(若构造函数只有一个参数) -->
<bean id="xxx" class="com.xxx.xxx" c:_-ref="yyy"/>
<!-- 注入字面值 -->
<bean id="xxx" class="com.xxx.xxx" c:_参数名="啦啦啦"/>
<bean id="xxx" class="com.xxx.xxx" c:_0="啦啦啦"/>
<!-- 注入字面值(若构造函数只有一个参数) -->
<bean id="xxx" class="com.xxx.xxx" c:_="啦啦啦"/>
PS:c命名空间不支持集合装配!
<bean id="xxx" class="com.xxx.xxx">
<property name="属性名" ref="yyy" />
</bean>
<bean id="xxx" class="com.xxx.xxx" p:属性名-ref="yyy" />
@Configuration
@Import({XXXConfig.class,YYYConfig.class})
class XXXConfig{
@Bean
public A setA(){
return new A();
}
}
@Configuration
@ImportResource("classpath:xxx.xml")
class XXXConfig{
@Bean
public A setA(){
return new A();
}
}
<beans>
<import resource="xxx.xml" />
<bean />
</beans>
直接声明一个bean即可:
<bean class="com.xxx.XXXConfig" />