Spring中的自动装配(AutoWire)

采用的是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)