ITEEDU

Spring自动装配Autowire

自动装配:让Spring通过检查BeanFactory中的内容,来替我们指定其他被依赖的bean。

由于autowire可以针对单个bean进行设置,因此可以让有些bean使用autowire,有些bean不采用。

由于自动装配不能体现bean之间的依赖关系,强烈推荐在开发过程中采用自动装配,而在系统趋于稳定的时候改为显式装配的方式。

模式 说明
no 不使用自动装配。必须通过ref元素指定依赖,这是默认设置。由于显式指定协作者可以使配置更灵活、更清晰,因此对于较大的部署配置,推荐采用该设置。而且在某种程度上,它也是系统架构的一种文档形式。
byName 根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配。例如,在bean定义中将autowire设置为by name,而该bean包含master属性(同时提供setMaster(..)方法),Spring就会查找名为master的bean定义,并用它来装配给master属性。
byType 如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配。如果存在多个该类型的bean,那么将会抛出异常,并指出不能使用byType方式进行自动装配。若没有找到相匹配的bean,则什么事都不发生,属性也不会被设置。如果你不希望这样,那么可以通过设置dependency-check="objects"让Spring抛出异常。
constructor byType的方式类似,不同之处在于它应用于构造器参数。如果在容器中没有找到与构造器参数类型一致的bean,那么将会抛出异常。
autodetect 通过bean类的自省机制(introspection)来决定是使用constructor还是byType方式进行自动装配。如果发现默认的构造器,那么将使用byType方式。

设置方法

文件级自动装配

<beans xmlns="http://www.springframework.org/schema/beans"
....
           default-autowire="byName"
           >
	..
	<bean id="bean2" class="com.iteedu.spring.Bean2" autowire-candidate="true"/>
                   ...
</beans>

全局是指一个配制文件中的所有bean默认都自动装配,不想自动装配的可以<bean/>元素的 autowire-candidate属性可被设为false,这样容器在查找自动装配对象时将不考虑该bean。

bean级自动装配

<bean id="bean2" class="com.iteedu.spring.Bean2" autowire="byName"/>

如果<beans>上没有设置自动装配,要以在<bean>上设置 autowire=”….”设置自动装配

自动装配建议用byType,直接通过类判断。