一、autowire 属性
autowire属性值  具体含义
no 不使用自动装配。必须通过ref元素指定依赖,这是默认设置。显式指定协作者可以使配置更灵活、更清晰,但是ref 方式是的XML体积臃肿维护强度高。
byName 根据属性名自动装配。此选项将检查容器并根据名字(id)查找与属性完全一致的bean,并将其与属性自动装配。
若找不到则不装配。
byType

      如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配。

      如果存在多个该类型的bean,那么将会抛出异常,并指出不能使用byType方式进行自动装配。primary="true" 可以设置优先权 避免异常抛出
     若没有找到相匹配的bean,则什么事都不发生,属性也不会被设置。
如果你不希望这样,那么可以通过设置dependency-check="objects"让Spring抛出异常。

constructor 与byType的方式类似,不同之处在于它应用于构造器参数。
如果在容器中没有找到与构造器参数类型一致的bean,那么将会抛出异常。
autodetect 通过bean类的自省机制(introspection)来决定是使用constructor还是byType方式进行自动装配。
如果发现默认的构造器,那么将使用byType方式。
default 同<beans/>级别设定的autowiring策略
 
自动装配与其他装配方式存在冲突时,自动装配具有较低优先级,会被冲掉。具有autowire-candidate="false" 属性的Bean不能作为协作者
 
  1. package cn.beanfactory.bean; 
  2.  
  3. public class AutowireBean2 { 
  4.     public String toString(){ 
  5.         return "AutowireBean2"
  6.     } 
  7.  
 
  1. package cn.beanfactory.bean; 
  2.  
  3. public class AutowireBean1 { 
  4.     public String toString(){ 
  5.         return "AutowireBean1"
  6.     } 
  7.  
 
  1. package cn.beanfactory.bean; 
  2.  
  3. public class AutowireBean { 
  4.     private AutowireBean1 autowireBean1; 
  5.     private AutowireBean2 autowireBean2; 
  6.     public  AutowireBean(){ 
  7.         System.out.println("AutowireBean()"); 
  8.     } 
  9.     public AutowireBean(AutowireBean1 autowireBean1, AutowireBean2 autowireBean2) { 
  10.         System.out.println("AutowireBean(AutowireBean1 autowireBean1, AutowireBean2 autowireBean2)"); 
  11.         this.setAutowireBean1(autowireBean1); 
  12.         this.setAutowireBean2(autowireBean2); 
  13.     } 
  14.     public AutowireBean2 getAutowireBean2() { 
  15.         return autowireBean2; 
  16.     } 
  17.     public void setAutowireBean2(AutowireBean2 autowireBean2) { 
  18.         this.autowireBean2 = autowireBean2; 
  19.     } 
  20.     public AutowireBean1 getAutowireBean1() { 
  21.         return autowireBean1; 
  22.     } 
  23.     public void setAutowireBean1(AutowireBean1 autowireBean1) { 
  24.         this.autowireBean1 = autowireBean1; 
  25.     } 
  26.     public String toString(){ 
  27.         return "autowireBean1:"+autowireBean1+";autowireBean2:"+autowireBean2; 
  28.     } 
  29.  
 
 
  1. log.info("============autowire====================="); 
  2.     AutowireBean byName =  gbfa.getBean("byName"); 
  3.     AutowireBean byType =  gbfa.getBean("byType"); 
  4.     AutowireBean byConstructor =  gbfa.getBean("byConstructor"); 
  5.     AutowireBean byAutodetect =  gbfa.getBean("byAutodetect"); 
  6.     log.info("byName:"+byName+",\nbyType:"+byType+",\nbyConstructor:"+byConstructor+",\nbyAutodetect:"+byAutodetect); 
 
  1. <!-- autowire --> 
  2.     <bean id="byName" class="cn.beanfactory.bean.AutowireBean" autowire="byName" /> 
  3.     <bean id="byType" class="cn.beanfactory.bean.AutowireBean" autowire="byType"/> 
  4.     <bean id="byConstructor" class="cn.beanfactory.bean.AutowireBean"  autowire="constructor"/> 
  5.     <bean id="byAutodetect"  class="cn.beanfactory.bean.AutowireBean"  autowire="autodetect"/> 
  6.     <bean id="autowireBean1" class="cn.beanfactory.bean.AutowireBean1" autowire-candidate="true"/>  
  7.     <bean id="autowireBean2" class="cn.beanfactory.bean.AutowireBean2"/> 
  8.     <bean id="autowireBean2primary" class="cn.beanfactory.bean.AutowireBean2" primary="true"/> 
 
 
 
 

dependency-check 属性

 

dependency-check属性 具体含义
none 不去检查受管Bean的依赖性,这是受管Bean的默认行为
simple 仅仅对JAVA原型(primitive)和集合类型进行检查
objects 仅仅对协作者(对象类型)进行检查
all 同时对Java原型(primitice)、集合类型、协作者(对象类型)进行检查
default 同<beans/>级别指定的一致

 

 

  1. AutowireBean autowireBean =  gbfa.getBean("autowireBean"); 
  2.     log.info("byName:"+byName+",\nbyType:"+byType+",\nbyConstructor:"+byConstructor+",\nbyAutodetect:"+byAutodetect+";\nautowireBean:"+autowireBean); 

 

  1. <!-- dependency-check --> 
  2.     <bean id="autowireBean" class="cn.beanfactory.bean.AutowireBean" dependency-check="objects"> 
  3.         <property name="autowireBean1" ref="autowireBean1"/> 
  4.         <property name="autowireBean2"> 
  5.             <null/><!-- <value/> 赋值 null --> 
  6.         </property> 
  7.         <property name="str"> 
  8.             <value/><!-- <value/> 赋值“” --> 
  9.         </property> 
  10.     </bean> 

 

二、@required 注解 

 

  1. package cn.beanfactory.bean; 
  2.  
  3. import javax.xml.ws.FaultAction; 
  4.  
  5. import org.springframework.beans.factory.annotation.Required; 
  6.  
  7. public class RequiredBean { 
  8.     private HelloWorld hw1; 
  9.     private HelloWorld hw2; 
  10.     private String str; 
  11.     public HelloWorld getHw1() { 
  12.         return hw1; 
  13.     } 
  14.     @Required 
  15.     @ForYou 
  16.     public void setHw1(HelloWorld hw1) { 
  17.         this.hw1 = hw1; 
  18.     } 
  19.     public HelloWorld getHw2() { 
  20.         return hw2; 
  21.     } 
  22.     @Required 
  23.     public void setHw2(HelloWorld hw2) { 
  24.         this.hw2 = hw2; 
  25.     } 
  26.     public String getStr() { 
  27.         return str; 
  28.     } 
  29.     @Required 
  30.     public void setStr(String str) { 
  31.         this.str = str; 
  32.     } 
  33.  

 

  1. <!-- @required 注解  提供细粒度的依赖检查--> 
  2. <bean id="requiredAnnotationBeanPostProcessor" class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor"> 
  3.     <property name="requiredAnnotationType" value="cn.beanfactory.bean.ForYou"/> <!-- 指定标识 --> 
  4. </bean> 
  5. <bean id="requriedBean" class="cn.beanfactory.bean.RequiredBean"> 
  6.     <property name="hw1" ref="helloWorld"/> 
  7.     <property name="hw2"> 
  8.         <null/> 
  9.     </property> 
  10.     <property name="str"> 
  11.         <value/> 
  12.     </property> 
  13. </bean> 
  14. <bean name="helloWorld" class="cn.beanfactory.bean.HelloWorld"> 
  15.     <property name="helloStr" ref="fileHello"></property> 
  16. </bean> 
  17.     <bean name="fileHello" class="cn.beanfactory.bean.FileHelloStrImpl"> 
  18.     <constructor-arg value="helloWorld.properties" /> 
  19. </bean> 
  20.