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,尤其是集合注入时。
🏷️
标签
➡️