您所在的位置:读书频道 > 设计开发 > Java系列 > 5.6.4 @Autowired注解

5.6.4 @Autowired注解

2010-04-08 19:24 罗时飞 电子工业出版社 字号:T | T
一键收藏,随时查看,分享好友!

《精通Spring——深入Java EE开发核心技术》第5章 控制反转容器,本章将从介绍IoC背景知识入手,继而进入到BeanFactory和ApplicationContext容器的讨论之中。本节为大家介绍@Autowired注解。

AD:

5.6.4  @Autowired注解

自Spring诞生以来,<bean/>的autowire和dependency-check属性便一直存在。当JDK 5.0正式发布后,Spring针对dependency-check属性引入了对应的@Required。同理,它针对autowire属性引入了对应的@Autowired注解,其定义摘录如下。

  1. @Retention(RetentionPolicy.RUNTIME)  
  2. @Target({ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.METHOD})  
  3. public @interface Autowired {  
  4.  
  5.     //是否必须满足依赖性检查  
  6.     boolean required() default true;  
  7.  

@Autowired注解能够作用于构建器、属性、方法。这里的方法不局限于设值方法,即setter方法,常见的各种方法都可以应用这一注解。比如,位于autowiringdemo项目中的TestBean1类的testBean2和testBean3属性应用了这一注解,具体如下。

  1. @Autowired(required=false)  
  2. private TestBean2 testBean2;  
  3.  
  4. @Autowired 
  5. private TestBean3 testBean3; 

为启用这一注解,AutowiredAnnotationBeanPostProcessor必须定义在XML配置文件中,示例如下,摘自autowired.xml。运行时,testBean2和testBean3受管Bean会自动注入到testBean1中。开发者是否注意到@Autowired暴露的required属性,这是承担着依赖性检查任务的重要属性。默认时,凡是应用了@Autowired注解的属性和方法都必须找到合适的协作者,否则DI容器会抛出异常,通过调整required属性取值能够改变这一行为。

  1. <bean class="org.springframework.beans.factory.annotation.  
  2.         AutowiredAnnotationBeanPostProcessor"/>  
  3.  
  4. <bean id="testBean1" class="test.TestBean1"/>  
  5.       
  6. <bean id="testBean2" class="test.TestBean2"/>  
  7.  
  8. <bean id="testBean3" class="test.TestBean3"/>  

下面给出了应用于设值方法的@Autowired注解。

  1. @Autowired(required=false)  
  2. public void setTestBean2(TestBean2 testBean2) {  
  3.     this.testBean2 = testBean2;  
  4. }  
  5.  
  6. @Autowired 
  7. public void setTestBean3(TestBean3 testBean3) {  
  8.     this.testBean3 = testBean3;  

下面给出了应用于构建器的@Autowired注解。

  1. @Autowired(required=false)  
  2. public TestBean1(TestBean2 tb2, TestBean3 tb3) {  
  3.     this.testBean2 = tb2;  
  4.     this.testBean3 = tb3;  

下面给出了应用于普通方法的@Autowired注解。

  1. @Autowired 
  2. public void preparedBean(TestBean2 tb2, TestBean3 tb3){  
  3.     this.testBean2 = tb2;  
  4.     this.testBean3 = tb3;  

除了能够自动注入普通受管Bean外,@Autowired注解还能够注入一些特殊对象,比如受管Bean所在DI容器中的各种元数据对象,示例如下。@Autowired将当前DI容器注入。

  1. @Autowired 
  2. private ApplicationContext ac; 

在@Autowired的required属性与@Required注解间进行取舍

@Required是专门用于依赖性检查的注解,而@Autowired注解的required属性也能够用来承担依赖性检查工作。一旦@Required应用到目标设值方法,则DI容器必须成功调用这一设值方法,@Required注解才认为依赖性条件得到满足,否则将抛出异常。相比之下,当我们将@Autowired注解的required属性设置为false时,即使未找到合适的协作者,异常都始终不会被抛出。

【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节

分享到:

  1. Linux服务器配置全程实录
  2. 揭秘--优秀PPT这样制作

热点职位

更多>>

热点专题

更多>>

读书

精通Spring 2.x——企业应用开发详解
本书深刻揭示了Spring的技术内幕,对IoC、AOP、事务管理等根基性的技术进行了深度的挖掘。读者阅读本书后,不但可以熟练使用Spri

51CTO旗下网站

领先的IT技术网站 51CTO 领先的中文存储媒体 WatchStor 中国首个CIO网站 CIOage 中国首家数字医疗网站 HC3i