您的位置:首页 > 编程语言 > Java开发

Spring中的自动装配(AutoWire)

2012-12-29 16:39 281 查看
采用的是Spring2.0的xml,在这里,IOC控制反转,我只探讨autowire的四个比较常用的属性

一:系统默认的autiwire="no"

<bean id="show" class="com.zgz008.web.ShowListBean" autowire="no" >

<property name="showService">

<ref bean="showService"></ref>

</property>

</bean>

proprtty name属性指的是com.zgz008.web.ShowListBean内部反射成set方法生成的,并不是说一定是属性名showService

ref bean指的就是我们的id号啦

二: autowire="byName"

<bean id="show" class="com.zgz008.web.ShowListBean" autowire="byName" />

自动根据applicationContext.xml里面的bean id属性反射成set方法,去查询com.zgz008.web.ShowListBean有没有拥有这个方法

有的话就自动依赖注入

三:autowire="byType"

<bean id="show" class="com.zgz008.web.ShowListBean" autowire="byType" />

只要com.zgz008.web.ShowListBean有一个属性与Spring容器中的属性相匹配,那么就会自动装载进来,调用的是set方法(不用管属性名)

四:autowire="constructor"

<bean id="show" class="com.zgz008.web.ShowListBean" autowire="constructor" >

<constructor-arg index="0" type="com.zgz008.service.IShowService"">

<ref bean="showServiceOK" />

</constructor-arg>

</bean>

使用的是构造器注入,ref bean指的是id号,只要类型匹配就会自动注入,(不用管属性名)

总的来说,只要你命名规范符合标准,应该不会有什么大问题的

以下内容转载

no 不使用自动装配。必须通过ref元素指定依赖,这是默认设置。由于显式指定协作者可以使配置更灵活、更清晰,因此对于较大的部署配置,推荐采用该设置。而且在某种程度上,它也是系统架构的一种文档形式。

byName 根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配。例如,在bean定义中将autowire设置为by name,而该bean包含master属性(同时提供setMaster(..)方法),Spring就会查找名为master的bean定义,并用它来装配给master属性。

byType 如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配。如果存在多个该类型的bean,那么将会抛出异常,并指出不能使用byType方式进行自动装配。若没有找到相匹配的bean,则什么事都不发生,属性也不会被设置。如果你不希望这样,那么可以通过设置dependency-check="objects"让Spring抛出异常。 网管论坛bbs_bitsCN_com

constructor 与byType的方式类似,不同之处在于它应用于构造器参数。如果在容器中没有找到与构造器参数类型一致的bean,那么将会抛出异常。

autodetect 通过bean类的自省机制(introspection)来决定是使用constructor还是byType方式进行自动装配。如果发现默认的构造器,那么将使用byType方式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring autuwrie