@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.