@Autowired 和 @Resource:哪种方式更适合你的项目?
摘要助手
切换
SummaryGPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往订阅 💥
前往评论 💬
👀 部署教程
@Autowired 和 @Resource:哪种方式更适合你的项目?
dong4j- 作用: 两者都可以用来装配 bean,可以写在字段上或写在 setter 方法上。
- 默认注入方式:
- @Autowired (Spring 注解): 默认按类型 (byType) 注入。
- @Resource (J2EE 注解): 默认按名称 (byName) 注入。
- required 属性:
- @Autowired: 默认要求依赖对象必须存在,可以设置 required=false 允许 null 值。
- @Resource: 默认情况下,找不到匹配的 bean 会抛出异常。
- 指定名称:
- @Autowired: 可以结合 @Qualifier 注解指定 bean 的名称。
- @Resource: 可以直接在注解中通过 name 属性指定 bean 的名称。
- 代码示例:
1 | // 使用 @Autowired |
Spring 注解 @Resource 和 @Autowired 区别对比
- 共同点:
- 两者都可以写在字段和 setter 方法上。
- 如果都写在字段上,则不需要再写 setter 方法。
- 不同点:
- @Autowired:
- 默认按类型 (byType) 注入。
- 可以设置 required 属性允许 null 值。
- 可以结合 @Qualifier 注解指定 bean 的名称。
- @Resource:
- 默认按名称 (byName) 注入。
- 可以直接在注解中通过 name 属性指定 bean 的名称。
- 也可以通过 type 属性按类型注入。
- 如果既不指定 name 也不指定 type,则默认按 byName 注入。
- @Autowired:
- 注入顺序:
- @Resource:
- 如果指定了 name 和 type,则查找唯一匹配的 bean。
- 如果指定了 name,则查找名称匹配的 bean。
- 如果指定了 type,则查找类型匹配的 bean。
- 如果既不指定 name 也不指定 type,则先按 byName 注入,找不到则按 byType 注入。
- @Resource:
总结
- 选择建议:
- 如果更倾向于按类型注入,建议使用 @Autowired。
- 如果更倾向于按名称注入,或者希望减少与 Spring 的耦合,建议使用 @Resource。
- 使用场景:
_ @Autowired 适用于大多数情况,尤其是在依赖类型明确的场景下。
_ @Resource 适用于依赖名称明确的场景,或者希望减少与 Spring 耦合的场景。
希望以上信息对您有所帮助!
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果