网上资料
百度搜索"@Autowired @Resource 区别"一大堆,关键是需要自己动手时间
https://www.cnblogs.com/think-in-java/p/5474740.html
=================================================================
解决一个接口多个实现类的冲突问题
实践篇
注意:
1.@Service后面如果不带value的话,其中它也是有value的,只是用默认值,为该实现类的首字母小写,如PurStockOutServiceImplTwo实现类的该value为purStockOutServiceImplTwo,表示该实现类注册的bean的id为"purStockOutServiceImplTwo"
2.(未经验证)@Resource后面如果不带"name",@Qualifier后面如果不带"value"的话,引用的bean id默认就是定义的变量的名称,如
@Resource
private StudentService studentTwoService;
中其实引用的service bean id就是 "studentTwoService"
比如以下几个方案,在springboot环境下亲测都可行:
-----------------------------------------------------------------------------------------------------------------
第一种方案,@Resource注入,@Service中不加入value,根据默认类名区分:
Controller中加入:
@Resource(name = "purStockOutServiceImplTwo")
Service中加入:
@Service
其中Resource中指定的name的命名是对应需要实现的Service中的名称的首字母小写,也就是说上文的实现类是PurStockOutServiceImplTwo
-----------------------------------------------------------------------------------------------------------------
第二种方案,@Resource注入,@Service中加入value:
Controller中加入:
@Resource(name = "purStockOutServiceImplTwo")
Service中加入:
@Service(value = "purStockOutServiceImplTwo")
Resource中的name和Service中的value名称要对应.
-----------------------------------------------------------------------------------------------------------------
第三种方案,@Autowired+@Qualifier搭配使用,@Service根据加入value和不加入value可以再分为两种情况如第一、二种方案所示,Qualifier中的value的命名需要与Service中的value名称对应,如果Service中的value没有指定,则需要对应实现的Service中的名称的首字母小写,也就是说上文的实现类是PurStockOutServiceImplTwo:
Controller中加入:
@Autowired
@Qualifier(value = "purStockOutServiceImplTwo")
Service中加入:
@Service
=================================================================