1. autowire 自动装配
属性:
byName <bean .... autowire="byName">
byType
constructor
autodetect
default
*如果目标Bean找不到,则对应的属性值为null;但如果找到多个匹配对象,则会有异常抛出。如需要避免异常,可以启用<bean/>内置的primary属性。如<bean id="testBean" class="test.TestBean" primary="true">
*autowire-candidate 该属性设置为false会使当前bean不会成为其他bean的协作者。如<bean .... autowire-candidate="false">.
*@Autowired 注解
必须加入<bean id="..." class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"> 来激活注解
这样就可以在代码中加入如:(可以针对构造器,属性,方法,特殊对象)
@autowired(required=false)
......
注意这里required和@Require注解的区别:同样是检查依赖条件,但required=false时,即使没找到合适的依赖条件,不会抛出异常,而@Require则会抛出异常.
2.dependency-check 检查对应的属性是否提供取值
属性:
none
simple
objects
all
default
如<bean ... dependecy-check="objects"> 只会检查注入的是对象的bean,如没有提供相应取值,则通不过依赖检查.
<property name="hello" ref="helloworld"/>
3.@Require 注解
更加细粒度的检查属性是否提供取值
必须加入<bean id="..." class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor"> 来激活注解
4.<qualifier/>元素和@Qualifier注解
细粒度的控制@Autowired,可用于属性,类,参数,接口等地方。比如有多个同一类型但是不同的bean需要注入同一受管bean时,如
<bean id="bean2a" class="test.TestBean2">
<qualifier value="2a">
</bean>
<bean id="bean2b" class="test.TestBean2">
<qualifier value="2b">
</bean>
<bean id="bean2c" class="test.TestBean2">
<qualifier value="2c">
</bean>
.......
在代码中可如下编写
@Qualifer("2a")
private TestBean2 testBean2a;
@Qualifer("2b")
private TestBean2 testBean2b;
@Qualifer("2c")
private TestBean2 testBean2c;
5.<context:annotation-config/>
以上不管是@Required还是@Autowired注解,开发者都需要在XML中配置该元素。
这是为了编写方便,不用单独列出注解必须的一些bean。
但还有一些它没有能自定义的,如RequiredAnnotationBeanPostProcessor.