Spring 2.5 注释驱动的 IoC 功能(总结)

来源:互联网 发布:大学生旅游攻略 知乎 编辑:程序博客网 时间:2024/06/11 09:06

reference:

http://www.ibm.com/developerworks/cn/java/j-lo-spring25-ioc/

http://leiwuluan.iteye.com/blog/607373

http://www.chinasb.org/archives/2011/06/2443.shtml


@Autowired 与@Resource的区别:

 

1、 @Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。

2、 @Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下:

1@Autowired() @Qualifier("baseDao")
2private BaseDao baseDao;


    -如果我们定义了name那么spring 就使用byName 方式注入

   -如果我们定义了type 那么spring 就用byTyte方式注入

  如 : @Resource(name = "office1")   //自动注入bean Name= “office1” 的bean
         private Office office;



1. @Autowired

 1) 对变量@Autowired,可以去掉setter() 

 2)  @Autowired  默认是byType,所有有多个相同的bean 时,会出问题,要搭配@Qualifier

 3) 它可以注释到变量,方法 以及 构造函数

 4)  如果我们在spring 中配置了多个相同的类型时,而我们的注释又同时是通过byType时,那么spring 就会出错,它不知道哪个bean 是它要的。

      可以将@Qualifier 和@Autowired 一起用 ; @Qualifier 只能和@Autowired结合使用,是对@Autowired有益的补充。一般来讲,@Qualifier对方法签名中入参进行注释会降低代码的可读性,而对成员变量注释则相对好一些。


2. JSR-250注释@Resource@PostConstruct 以及 @PreDestroy

1)@Resource 的作用相当于 @Autowired,只不过 @Autowired 按 byType 自动注入,面@Resource 默认按 byName 自动注入罢了

  name spring 将它解释成bean的名字

  type spring 将它解释成bean 的类型

 

如果我们定义了name那么spring 就使用byName 方式注入

如果我们定义了type 那么spring 就用byTyte方式注入

如果两者都没有定义那么就默为byName


2)不管是通过实现 InitializingBean/DisposableBean 接口,还是通过 <bean> 元素的init-method/destroy-method 属性进行配置,都只能为 Bean 指定一个初始化 / 销毁的方法。但是使用@PostConstruct@PreDestroy 注释却可以指定多个初始化 / 销毁方法,那些被标注@PostConstruct@PreDestroy 注释的方法都会在初始化 / 销毁时被执行。


3. 使用: <context:annotation-config />

AutowiredAnnotationBeanPostProcessorCommonAnnotationBeanPostProcessor 就是处理这些注释元数据的处理器。但是直接在 Spring 配置文件中定义这些 Bean 显得比较笨拙。Spring 为我们提供了一种方便的注册这些BeanPostProcessor 的方式,这就是 <context:annotation-config/>。


原创粉丝点击