学习@Autowired与@Resource与@Reference注解的区别

@Autowired、@Resource、@Reference


@Resource和@Autowired都是使用依赖注入的,不同的是@Autowired是使用byType类型而@Resource则是使用byName类型注入

byName和byType

byName会搜索整个bean中的配置文件来匹配bean,如果有相同名称的则匹配bean,没有则会显示异常

byType会搜索整个bean中的配置文件来匹配bean,如果有相同类型则匹配bean,没有则会显示异常

@Autowired

@Autowired是使用byType进行自动装配,此注解是由Spring提供,需要导入org.springframework.beans.factory.annotation.Autowired 包

在使用@Autowired时,首先在容器中查询对应类型的bean

  • 如果查询结果刚好为一个,就将该bean装配给@Autowired指定的数据
  • 如果查询的结果不止一个,那么@Autowired会根据名称来查找。
  • 如果查询的结果为空,那么会抛出异常。解决方法时,使用required=false
@Server
public class UserDao{
 	@Autowired
 	private String UserDao;
}

@Resource

@Resource有两个重要属性,name和type

spring将name解析为bean的名字,type则解析为bean的类型。如果使用name,spring将匹配bean的name来进行自动注入。如果使用为type,spring将匹配bean的类型进行自动注入。如果两个都没有进行指定,则通过反射机制使用byName进行自动注入

@Server
public class UserDao{
	@Resource(name = "user")
	private User user;
}

@Reference

@Reference是dubbo注解,它注入的是分布式的远程服务对象,需要dubbo配置使用。在微服务中,工程项目会分成很多模块(Maven工程),每个模块相当于一个服务,一个服务调用另一个服务的功能需要使用@Reference注解。

总结

简单来说他们的区别:

@Reference注入的是分布式中的远程服务对象,@Resource和@Autowired注入的是本地spring容器中的对象

参考博客:
链接: https://blog.csdn.net/u014662858/article/details/84262544.
链接: https://www.jianshu.com/p/d228af029608.

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
@Autowired与@Resource是用来实现依赖注入的注解,在Spring/Spring Boot项目中使用。它们具有一些不同之处。首先,它们的来源不同,@Autowired来自于Spring框架,而@Resource来自于Java的JSR-250。其次,它们依赖查找的顺序不同,@Autowired先根据类型再根据名称查询,而@Resource先根据名称再根据类型查询。另外,它们支持的参数数量和用法也有所不同。@Autowired只支持设置一个参数,而@Resource支持设置多达七个参数。关于依赖注入的用法支持,@Autowired既支持构造方法注入,又支持属性注入和Setter注入,而@Resource只支持属性注入和Setter注入。此外,在编译器IDEA中,当注入Mapper对象时,使用@Autowired注解编译器会提示错误,而使用@Resource注解则不会提示错误。需要注意的是,@Autowired是由Spring提供,而@Resource是由Java提供。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [面试突击:@Autowired 和 @Resource 有什么区别?你学会了吗?](https://blog.csdn.net/Candyz7/article/details/126578224)[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^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [@Resource和@Autowired区别与理解](https://blog.csdn.net/hanhanhanxu/article/details/106433857)[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^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值