@autowired自动装配接口存在多个实现
class imagedataservice extends datadao添加注解@service(value=“aaadataservice’”)
当我们需要这个类时 bean对应的name为aaadataservice
当datadao有多个现实时,下例代码编译时会报错
@autowired private dataservice dataservice;
1、@resource注解
@resource(name="aaadataservice") private dataservice dataservice;
@resource的作用相当于@autowired,只不过@autowired按bytype自动注入,而@resource默认按 byname自动注入。
2、@qualifier注解
@autowired
@qualifier("aaadataservice")
private dataservice dataservice;
3、默认值
当class imagedataservice没有特殊标识beanname时(@service)
变量名用imagedataservice而不是dataservice。
通常情况下@autowired是通过bytype的方法注入的,可是在多个实现类的时候,bytype的方式不再是唯一,而需要通过byname的方式来注入,而这个name默认就是根据变量名来的。
@autowired
private dataservice voicedataservice;
@autowired
private dataservice textdataservice;
@autowired
private dataservice aaadataservice;
@autowired
@qualifier(value = "aaadataservice")
private dataservice videodataservice;
@test
public void test(){
system.out.println(voicedataservice.getclass().tostring());
system.out.println(textdataservice.getclass().tostring());
system.out.println(videodataservice.getclass().tostring());
}
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论