Spring 探索丨既生@Resource,何生@Autowired?

💡 原文中文,约4400字,阅读约需11分钟。
📝

内容提要

介绍Spring依赖注入中的@Resource和@Autowired注解,它们的功能类似但概念不同。@Resource更倾向于找已知资源,而@Autowired倾向于按类型搜索资源。Spring支持两个注解是为了方便其他框架迁移。推荐使用构造函数注入,集合注入时使用@Autowired。

🎯

关键要点

  • @Resource和@Autowired是Spring依赖注入中常用的两个注解,功能相似但概念不同。

  • @Resource更倾向于按名称查找已知资源,而@Autowired则倾向于按类型查找资源。

  • Spring支持这两个注解是为了方便其他框架的迁移,@Resource符合JSR-250规范。

  • @Autowired在属性注入时会产生警告,推荐使用构造函数注入。

  • @Resource在查找资源时,如果按名称失败会回退到按类型查找,这可能导致概念混淆。

  • 使用@Autowired时,声明为final的属性无法进行属性注入,需使用构造函数注入。

  • 属性注入可能导致类的单一职责原则被忽视,构造函数注入能更好地维护这一原则。

  • 循环依赖问题在构造函数注入中更容易被发现。

  • @Resource是Java标准,能够在不同的IoC容器中正常工作,而@Autowired是Spring特有的。

  • 推荐在确定性单一资源时使用@Resource,在类型匹配时使用@Autowired,尤其是集合注入时。

➡️

继续阅读