java - 如何在spring中通过泛型变量注入bean
问题描述
我在使用泛型类型注入 bean 时遇到问题。看例子。我将向服务注入一个类型来自 App 类的存储库。现在我有例外:
没有可用的“asd.IRepository”类型的合格 bean:预期的单个匹配 bean,但找到了 2:a,b
asd 这里是包,仅用于测试。
在这种情况下我能做什么?有什么办法可以做到吗?
public interface IRepository<T, V> {
void print();
}
@Component
public class A implements IRepository<String,String> {
@Override
public void print() {
System.out.println("A");
}
}
@Component
public class B implements IRepository<Double,String> {
@Override
public void print() {
System.out.println("A");
}
}
@Service
public class ServiceABC<V, T> {
@Autowired
private IRepository<V,T> repo;
public void print(){
repo.print();
}
}
@Controller
public class App {
@Autowired
private ServiceABC<String, String> serviceABC;
public static void main(String[] args) {
ApplicationContext ctx =
new AnnotationConfigApplicationContext("asd");
App app = ctx.getBean(App.class);
app.serviceABC.print();
}
解决方案
您必须命名您的组件并按名称自动装配:
@Component("A")
public class A implements IRepository<String,String> {...}
@Component("B")
public class B implements IRepository<Double,String> {...}
[...]
@Autowired
@Qualifier("B")
private IRepository repo;
推荐阅读
- amazon-web-services - [AWS Cognito]:如何发送重置密码一键链接而不是验证码
- java - 我的应用程序在我关闭后不断重置
- ruby-on-rails - 为什么 `npm run bundle -- -p` (webpack -p) 不为我的 rails 应用程序编译资源?
- javascript - 在 Angular 5 中编辑读取 xlsx 文件
- python - 如何更改进度条kivy的颜色
- selenium - 如何在 div 和 span(最好是 xpath)之间为包含不间断空格的文本编写定位器()
- excel - VBA 在文本框中下面的行中插入数据
- python - ImportError:无法导入名称“包含”
- azure-ad-b2c - 自定义策略中的自定义错误消息
- google-analytics - 如何在 Google Analytics api v4 中使用 AND 运算符过滤多个维度?