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

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/>。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值