@Autowired和@Resource有哪些区别

一、注解的作用

@Autowired和@Resource都是用来实现Bean的自动注入功能。

二、@Autowired和@Resource的区别

1、所属的包不同

  • @Autowired是Spring的注解。
  • @Resource是JSR-250的注解。

IDEA 有时候会在 @Autowired 注解上面提示Field injection is not recommended (字段注入是不被推荐的)这个警告,虽然并不属于报错,但是确实是警告的存在。
就是因为@Autowired是Spring提供的,它是特定IoC提供的特定注解,这就导致了应用与框架的强绑定,一旦换用了其他的IoC框架,是不能够支持注入的。
而 @Resource是 Java 自己提供的,它是Java标准,所以它是与框架无关的。

2、依赖注入的支持不同

  • @Autowired能够用在构造函数、setter方法、属性上。
  • @Resource只能用在setter方法、属性上。

3、注入的默认类型不同

依赖注入功能,是先在容器中查找需要的对象,再将对象注入到当前类中。
查找的方式有两种:

  • byType:根据类型注入,如果容器中有多个相同类型的bean,则注入失败。
  • byName:根据名称注入,如果容器中有多个相同名称的bean,则注入失败。

@Autowired和@Resource都用到了byType和byName两种方式,但二者的使用顺序却不同。

@Autowired默认按类型注入,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false。
如果根据类型找不到合适的bean,则会抛出异常。
如果根据类型找到了多个bean,则再根据bean的名称进行匹配,如果匹配成功,则注入成功;如果匹配失败,则抛出异常。

@Autowired自动注入顺序流程图:

@Resource默认按名称注入,如果按名称注入找不到合适的bean,则再按类型注入。

@Resource自动注入顺序流程图:

也就是:

  • @Autowired默认先根据类型查找,如果找到多个,再根据名称查找;
  • @Resource默认先根据名称查找,如果找不到,再按类型查找。

三、总结

在Spring项目中,这两个注解一般可以互相替换。
主要是要了解它们的注入顺序。

posted @   树叶的一生啊  阅读(937)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示