学习@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
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值