@Autowired 和 @Resource 区别
时间: 2023-10-08 07:05:57 浏览: 147
@Autowired和@Resource都是用来进行依赖注入的注解,区别在于@Autowired是Spring中的注解,而@Resource是Java EE中的注解。@Autowired默认按照类型进行装配,通过byName属性指定具体名称进行装配;@Resource默认按照名称进行装配,可以指定name和type属性进行装配。
相关问题
@autowired和@resource区别用哪个
在Spring框架中,@Autowired和@Resource是两种常用的依赖注入注解。它们有一些区别,具体使用哪个取决于你的需求。
@Autowired是Spring框架自带的注解,它可以自动装配一个bean,通过根据类型进行匹配。当有多个bean满足条件时,可以通过使用@Qualifier注解指定具体的bean。@Autowired注解可以用在构造函数、属性和方法上。
@Resource是基于JSR-250规范的注解,它也可以自动装配一个bean,但是它通过名称进行匹配。当有多个bean满足条件时,可以通过使用name属性指定具体的bean。@Resource注解可以用在属性和方法上。
因此,如果你想根据类型进行自动装配,并且可能需要使用@Qualifier指定具体的bean时,可以使用@Autowired注解。如果你想根据名称进行自动装配,并且可能需要使用name属性指定具体的bean时,可以使用@Resource注解。
需要注意的是,@Autowired和@Resource都能实现依赖注入的功能,使用哪个主要取决于你的具体需求和喜好。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [Spring框架中 @Autowired 和 @Resource 注解的区别](https://download.csdn.net/download/weixin_38524871/14888410)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *2* [详解Spring依赖注入:@Autowired,@Resource和@Inject区别与实现原理](https://download.csdn.net/download/weixin_38670297/12748778)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *3* [(转)Spring中@Autowired注解和@Resource注解的区别](https://download.csdn.net/download/weixin_38669628/11518942)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
[ .reference_list ]
@autowired和@resource区别和构造器注入
### @Autowired 和 @Resource 注解的区别
@Autowired 是 Spring 框架特有的依赖注入方式之一,主要用于通过类型匹配来查找并装配所需的 bean 实例。当存在多个相同类型的候选者时,则会进一步依据名称进行区分[^1]。
@Resource 则属于 Java EE 的一部分,遵循 JSR-250 规范。此注解默认按照 byName 方式工作,即优先尝试基于属性名去寻找对应的 bean 进行绑定;如果找不到同名的 bean 才考虑采用 byType 来定位目标对象[^2]。
### 构造器注入的用法
构造函数注入是一种推荐的做法,尤其适用于那些不可变的对象或者是有强制性的协作伙伴关系的情况。下面是一个简单的例子展示如何利用构造方法来进行 DI:
```java
public class UserService {
private final UserRepository userRepository;
@Autowired // 可选:自Spring 4.3起,默认单个参数构造器无需显式标注@Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
// ...
}
```
对于上述代码片段而言,即使省略 `@Autowired` 标记也是可行的,因为从版本 4.3 开始,只要组件内仅定义了一个带参构造器的话,那么它会被自动识别为用于依赖注入的目标构造器。
### 不同依赖注入方法之间的差异
除了前面提到的选择策略上的区别外(byType 对于 @Autowired 而言,而 @Resource 更倾向于 byName),两者还有其他方面的不同之处:
- **作用范围**: 如前所述,@Autowired 属于 Spring 生态系统的组成部分,而@Resource 遵循的是更广泛的Java平台标准.
- **灵活性**: 使用 @Autowired 时可以通过设置 required=false 参数允许不存在对应bean的情况下不抛异常;但是@Resource 并不具备这样的选项.
综上所述,在实际开发过程中可以根据具体需求和个人偏好选择合适的DI手段.
阅读全文
相关推荐













