您的位置:首页 > 编程语言 > Java开发

Spring中 @Autowired注解与@Resource注解的区别

2016-07-05 00:20 841 查看
我们经常使用到@Autowired和@Resource进行装配,这两个注解的区别是什么呢。

相同点:
@Resource的作用相当于@Autowired,均可标注在字段或属性的setter方法上。
不同点:
(1)提供方:@Autowired是由org.springframework.beans.factory.annotation.Autowired提供,换句话说就是由Spring提供;

  @Resource是由javax.annotation.Resource提供,即J2EE提供,需要 JDK1.6及以上。
(2)注入方式:@Autowired默认按类型装配;@Resource默认按名称装配,也提供按照类型装配;
(3)@Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null 值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下:

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


@Resource有两个中重要的属性:name和type。name属性指定 byName,如果没有指定name属性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法 上,即默认取属性名作为bean名称寻找依赖对象。需要注意的是,@Resource如果没有指定name属性,并且按照默认的名称仍然找不到依赖对象 时, @Resource注解会回退到按类型装配。但一旦指定了name属性,就只能按名称装配了。

@Resource(name="baseDao")
private BaseDao baseDao;


推荐使用@Resource注解在字段上,这样就不用写setter方法了.并且这个注解是属于J2EE的,减少了与Spring的耦合,这样代码看起就比较优雅 。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: