@Autowired 与@Resource的区别

本文详细比较了Spring框架中的@Autowired和@Resource两种依赖注入注解,包括来源、注入方式、必要性、引入时间和执行时间点,并指出两者在实际应用中的常见场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

`@Autowired` 和 `@Resource` 都是 Spring 框架中用于依赖注入的注解,它们有一些细微的区别:

1. 来源不同:
   - `@Autowired` 是由 Spring 提供的注解。
   - `@Resource` 是由 JSR-250 规范提供的注解,因此它不是 Spring 特有的。

2. 注入方式不同:
   - `@Autowired` 默认按类型(byType)进行自动装配,如果需要按名称(byName)装配,则需要与 `@Qualifier` 注解一起使用。
   - `@Resource` 默认按名称(byName)进行装配,如果找不到与名称匹配的 bean,则会按类型(byType)装配。此注解有一个 'name' 属性,可以显式指定要注入的 bean 的名称。

3. 必要性不同:
   - `@Autowired` 默认情况下要求依赖对象必须存在,如果允许为 `null`,则需要设置 `required` 属性为 `false`。
   - `@Resource` 默认情况允许依赖对象不存在,如果设置了 `name` 或 `type` 而对应的 bean 找不到,则注入失败。

4. 引入时间不同:
   - `@Autowired` 是从 Spring 2.5 开始引入的。
   - `@Resource` 是从 Spring 2.5 开始支持的,但它来源于 JSR-250 规范。

5. 执行时间点不同:
   - `@Autowired` 是在所有的 Bean 完全初始化之后采取的处理方式。
   - `@Resource` 是在 Bean 初始化中创建对象的时候就进行了注入。

在实际使用中,`@Autowired` 结合 `@Qualifier` 被更多地使用于 Spring 应用程序中,尤其是当按类型自动装配是首选的场景。而 `@Resource` 更适用于名称显式定义更为明确的场景,或者在想要遵循 JSR-250 规范的应用程序中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值