@Autowired 和 @Resource的区别

目录

1. 来源

2. 处理方式

3. 支持的特性

总结


@Autowired@Resource 都是 Java 中用于依赖注入(Dependency Injection, DI)的注解,它们的主要区别在于来源、处理方式和支持的特性上。

1. 来源

  • @Autowired:是 Spring 框架特有的注解,用于实现依赖注入。它基于类型(byType)进行自动装配,如果需要,也可以基于名称(byName)进行装配。

  • @Resource:来源于 JSR-250(Java EE 5 引入的规范),是 Java 标准的一部分,不仅限于 Spring 框架,但 Spring 提供了对它的支持。@Resource 默认按照名称(byName)进行装配,如果找不到匹配的 bean 名称,则回退到按类型(byType)装配。

2. 处理方式

  • @Autowired

    • 默认情况下,@Autowired 要求依赖对象必须存在,如果 Spring 容器中不存在对应类型的 bean,则会抛出异常。

    • 可以通过设置 required 属性为 false 来改变这一行为,使得如果找不到匹配的 bean,则不会抛出异常,依赖对象会被设置为 null

    • 支持构造函数、字段、setter 方法等多种注入方式。

  • @Resource

    • @Resource 允许通过 name 属性指定要注入的 bean 的名称。

    • 如果不指定 name 属性,则默认按照名称(bean 的名称)进行装配,如果找不到匹配的名称,则回退到按类型装配。

    • @Resource 也可以用于字段、setter 方法等注入方式。

3. 支持的特性

  • @Autowired

    • 支持 @Qualifier 注解来指定注入的 bean 名称,实现更精确的依赖注入。

    • 可以与 @Primary 注解结合使用,标记某个 bean 为首选的 bean,当存在多个相同类型的 bean 时,优先注入这个被标记为 @Primary 的 bean。

  • @Resource

    • 提供了更广泛的兼容性,因为它不仅限于 Spring 框架。

    • 可以通过 nametype 属性来灵活指定依赖注入的方式。

总结

  • 如果你正在使用 Spring 框架,并且希望利用 Spring 提供的更多特性(如 @Primary@Qualifier),那么 @Autowired 是一个更好的选择。

  • 如果你希望你的代码更加标准化,不依赖于 Spring 框架的特定实现,或者你需要通过名称来精确控制依赖注入,那么 @Resource 可能更适合你的需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值