IT评测·应用市场-qidao123.com

标题: Spring 中的 @Resource vs @Autowired 他的区别用法? [打印本页]

作者: 伤心客    时间: 2024-11-11 17:26
标题: Spring 中的 @Resource vs @Autowired 他的区别用法?
在 Spring 的世界里,依赖注入无疑是焦点之一,而 @Autowired 和 @Resource 则是两个使用频率极高的注解。它们看似相似,但现实用法和行为却有许多不同。今天,我们来深入探讨它们的差异,让你在项目中更精准地使用它们。
一、根本概念:到底是什么?


二、@Autowired 的工作方式

@Autowired 注解的魅力在于其灵活的自动装配方式。当需要注入一个 Bean 时,@Autowired 会首先按范例寻找符合的 Bean。当存在多个同范例 Bean 时,若没有额外说明,Spring 将会报错。但可以通过加上 @Qualifier 指定 Bean 名称来办理:
  1. @Autowired
  2. @Qualifier("mySpecificBean")
  3. private MyService myService;
复制代码
Required 属性

@Autowired 默认是“强制装配”,即 required=true。若没有找到匹配的 Bean,则会抛出异常。但我们可以通过将 required 设置为 false,来允许没有找到 Bean 时不注入:
  1. @Autowired(required = false)
  2. private Optional<MyService> myService;
复制代码
通过 Optional 范例,可以或许更优雅地处理 Bean 的缺失。
三、@Resource 的工作方式

与 @Autowired 不同,@Resource 默认是按名称注入。它会优先寻找与属性名一致的 Bean 名称,如果找不到,则按范例注入。这种按名称优先的特性在现实使用中可以带来更多控制:
  1. @Resource(name = "mySpecificBean")
  2. private MyService myService;
复制代码
如果名称没有指定,Spring 会直接根据属性名查找与之对应的 Bean。例如,如果属性是 myService,它会实验找到名称为 myService 的 Bean。
四、@Autowired vs. @Resource 的区别一览

特性@Autowired@Resource来源Spring 特有JSR-250 标准(Java EE)默认装配方式按范例(byType)按名称(byName)兼容性仅限 Spring 环境Java 标准,更广泛兼容Required 属性支持 required不支持 required装配精致化控制共同 @Qualifier 使用可通过 name 属性指定名称 五、怎样选择?


六、总结

在 Spring 中,@Autowired 和 @Resource 提供了不同的依赖注入风格。合理使用它们,可以帮助我们写出更加灵活、可维护的代码。理解它们的区别,将让你在项目中更加游刃有余!

推荐阅读文章



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4