Spring 笔记1---autowire相关

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.

 

 

你可能感兴趣的:(spring,bean,xml)