@Reference 、@Resource和@Autowired的简单区分

主要谈一下对这三个注解的简单理解:
1.@Reference
@Reference是dubbo的注解,也是注入,他一般注入的是分布式的远程服务的对象,需要dubbo配置使用。

2.@Autowired
org.springframework.beans.factory.annotation.Autowired
SpringBoot项目中常用。简单来说就是引入由Spring容器管理的bean。

3.@Resource
javax.annotation.Resource
作用相当于@Autowired,只不过@Autowired是byType自动注入,而@Resource默认byName自动注入。

简单来说他们的区别:
@Reference注入的是分布式中的远程服务对象
@Resource和@Autowired注入的是本地spring容器中的对象。

### @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手段.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值