注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

2011终点

2011终点

 
 
 

日志

 
 

spring 自动装配  

2011-03-19 09:13:31|  分类: spring |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 接着聊,上次看了Spring中有关自动装配的话题,了解了byName和byType等几中自动装配方式。看来Spring用起来还是挺方便的嘛

   Spring2.1中允许用户通过@Autowired注解来对Bean的属性变量、属性Setter方法以及构造函数进行标注,配合AutowiredAnnotationBeanPostProcessor(好长啊。。)完成对Bean的自动装配。下面来看看实际的例子:

public class Boss {   private String title;     @Autowired   private Car car;     public Boss() {    this.title = title;   }     public Car getCar() {    return car;   }     public void setCar(Car car) {    this.car = car;   }     public String getTitle() {    return title;   }     public void setTitle(String title) {    this.title = title;   }    }

标注@Autowired注解的Bean并不会自动进行自动装配,它需要有一个配套的处理器,即AutowiredAnnotationBeanPostProcessor,该Bean后置处理器会在Spring容器启动时自动为标注为@Autowired注解的Bean实施自动装配。

  <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostP">
<bean id="boss" class="com.test.Boss"/>
<bean id="car"class="com.test.Car"/>

由于在Boss中的car属性被加上了@Autowired注解,那么它将被AutowiredAnnotationBeanPostProcess处理器自动装配到Boss Bean中去。

看了这么多自动装配,我们了解到存在多个匹配对象时候。Spring将会抛出异常,如果某个Bean不想被自动装配到其他的Bean中,Spring中的Bean有个autowire-candidate属性设置为false就可以达到我们的目的。

另外想说一下,一般要达到自动装配的目的我们都在Bean上autowire属性进行设置,如果我们想容器其他Bean都采用这种装配方式,那么就存在着所谓的全局自动装配策略了。Spring中的Beans元素标签的default-autowire属性就能满足我们的要求。默认是为no的不启用自动装配的。

谈了这么多自动装配的话题,自动装配已一两拨千金的方式完成了容器中Bean的装配工作,这种便捷的方式的确让人感到惬意啊。。但是象很多事物一样,这个功能也是一把双刃剑,减轻配置工作的同时,也造成了Bean之间的关系不明确,不清晰,也容易造成潜在的错误,比如说通过byName来装配,如果将属性名字改了后,Spring就不会将其自动装配给Bean的属性了,这个时候该属性值为null,而且Sping还不会抛出错误,因为通过属性注入的时候,属性值是可以选择的。而如果程序中有其他地方引用了该属性,将不可以避免的抛出NullPointerException异常,还有就是刚好有个重名的Bean那么可想而知,哈哈还真是危机不断啊,结果往往超出我么的预计啊。

 

  评论这张
 
阅读(1211)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017