注解Autowired和Resource

本文详细介绍了Spring框架中@Autowired和@Resource两个注解的用途及其区别。@Autowired默认按照Bean的类型进行装配,而@Resource默认按名称装配,找不到匹配名称时才按类型。此外,还提到了@Qualifier注解,它用于配合@Autowired指定按名称装配Bean。

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

日常使用Spring的过程中,有些很常用的注解,其中,Autowired和Resource使用频率极高,它们都是自动装配的作用,但它们有什么区别呢?

@Autowired

在springboot从入门到实战这本书中,是这样介绍的:该注解可以对类成员变量、方法及构造方法进行标注,完成自动装配的工作。通过@Autowired的使用来消除setter和getter方法。默认按照Bean的类型进行装配。

@Resource

而对于Resource的注解,其实跟Autowired的作用是一样的。区别在于:该注解默认是按照名称来装配注入的,只有当找不到与名称匹配的Bean时才会按照类型来装配注入,而Autowired默认是按照Bean的类型进行装配。Resource注解有两个属性,即name和type。name就是指定Bean实例名称,也就是按照名称来装配注入;type即指定Bean类型,也就是按照Bean的类型进行装配。

补充:@Qualifier

这个注解一般是跟@Autowired一起用,当Autowired需要按照名称来装配注入的时候,就跟此注解搭配使用,Bean的实例名称由@Qualifier的参数去指定。

### @Autowired @Resource 注解的区别 在Spring框架中,`@Autowired``@Resource`都是用于依赖注入的注解,但是它们来源于不同的标准并具有各自的特点。 #### 来源差异 - `@Resource` 是由J2EE提供的标准化注解,可以被多个容器识别支持[^1]。 - `@Autowired` 则是Spring特有的注解,专门为了简化Spring应用中的Bean装配过程而设计。 #### 功能对比 - **默认匹配策略** - 当使用`@Resource`时,默认按照名称(bean的名字)来进行查找;如果找不到,则会尝试按类型进行匹配。可以通过指定name属性来明确指出要注入的具体bean实例[@Resource(name="person")]。 - 对于`@Autowired`来说,默认行为是基于类型的自动装配。当存在多个相同类型的bean时,还需要配合`@Qualifier`一起使用以精确指定哪一个bean应该被注入[@Autowired @Qualifier("person")][^3]。 #### 性能考量 虽然有人认为`@Resource`通过名字定位可能会稍微快一点,但实际上这种性能差距非常微小,在实际项目开发过程中几乎不会成为选择的理由。 #### 推荐实践 考虑到未来可能的技术栈迁移以及减少对特定框架(如Spring)的耦合度,建议优先考虑使用更通用的标准注解即`@Resource`。然而,在纯Java EE环境中或者希望保持与Spring生态系统的紧密联系的情况下,也可以继续沿用`@Autowired`加上必要的限定符配置[^4]。 ```java // 使用@Resource的方式 public class ExampleService { @Resource(name = "specificDataSource") private DataSource dataSource; } // 使用@Autowired加@Qualifier方式 @Service public class AnotherExampleService { @Autowired @Qualifier("specificDataSource") private DataSource dataSource; } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值