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

来源:互联网 发布:java substring(1) 编辑:程序博客网 时间:2024/06/06 02:42

Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource、@PostConstruct以及@PreDestroy。
  @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。
  @Resource装配顺序
  1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
  2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
  3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
  4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;

@Autowired 与@Resource的区别:

 

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

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


@Autowired() @Qualifier("baseDao")
privateBaseDao baseDao;

3、@Resource(这个注解属于J2EE的),默认安装名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。


@Resource(name="baseDao")
privateBaseDao baseDao;

推荐使用:@Resource注解在字段上,这样就不用写setter方法了,并且这个注解是属于J2EE的,减少了与spring的耦合。这样代码看起就比较优雅

@Autowired() @Qualifier("baseDao")
privateBaseDao baseDao;
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 寄行李多少钱一斤 寄语格式 给寄邮件查询网 何处寄想思 药神 静夜寄思 寅吃卯粮的意思 中地寅岗建设集团有限公司 寅次郎的故事 寅次郎的故事1 寅次郎的故事主题曲 寅的读音 密源下载 密云路 密云景区 密云县男科医院 北京密云县 密云龙 密制鸡翅做法 密使第一部免费版 密使2 剑侠世界密保卡 怎么绑密保卡 qq取消密保卡 免费申请qq密保卡 qq密保卡号 密保卡下载 密保卡接触 圣斗士ol密保卡 如何解绑密保卡 问道密保卡怎么弄 qq安全中心密保卡 qq解除密保卡 qq怎么密保卡 怎样申请qq密保卡 qq密保卡解除 密保卡填写 wow领取密保卡 qq密保卡验证 怎么解绑qq密保卡 如何解除qq密保卡 魔兽世界密保卡丢