java - 将 String 的映射填充到公共接口的 Spring bean
问题描述
在我的 Spring Boot 应用程序中,我有一个如下界面:
public interface I {
}
我有两个实现接口的具体类I
,如下所示:
@Component
class A implements I {
private final B dependency1;
public A(B b) {
this.dependency1 = b;
}
}
第二类如下:
@Compeonent
class C implements I {
private final D dependency2;
public C(D d) {
this.dependency2 = d;
}
}
现在在工厂类中,我正在构建一个映射以根据一些标准获取特定类的对象,如下所示:
class Factory {
Map<String, I> criteriaToClassMap = new HashMap<>();
criteriaToClassMap.put("criteria1", new A()); <--I CANNOT DECIDE WHAT TO PUT HERE
criteriaToClassMap.put("criteria2", new C()); <--I CANNOT DECIDE WHAT TO PUT HERE
//Here I would like to get fully constructed object
public I getObject(String criteria) {
return criteriaToClassMap.get(criteria);
}
}
在上面两行中,我想在值中放入一个完全构造的对象。但我不明白我将如何从这里的 Spring 获得完全构造的对象。
有人可以帮忙吗?
解决方案
为什么不使用创建的组件?
@Component
class Factory {
Map<String, I> criteriaToClassMap = new HashMap<>();
public Factory (A a, C c) {
criteriaToClassMap.put("criteria1", a); //<-- use autowired A component
criteriaToClassMap.put("criteria2", c); //<-- use autowired C component
}
public I getObject(String criteria) {
return criteriaToClassMap.get(criteria);
}
}
推荐阅读
- oracle - 使用函数在 Oracle 中获取帐户详细信息
- javascript - 我现在可以得到未来未处理的承诺拒绝行为吗?
- firebase - 如果在 Firebase 触发器中发生错误,如何向客户端抛出错误?
- sql-server - WebAPI Get() 方法返回所有匹配条件的记录列表
- angular - 如何在 StackBlitz 中降级 npm 包的依赖关系?
- visual-studio - 将 C++ Builder 项目移植到 Visual Studio?
- java - java - 无法从客户端向服务器发送多条消息
- sql - Oracle 中的模式匹配
- angular - Angular / Firestore - 根据特定值创建多个文档
- lua - 'then' 预计在 ',' 附近,但我已经将 then 放置在 Lua 中