自动装配:让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,直接通过类判断。