我有一个应用程序类“Application”,一个由“Impl1”和“Impl2”扩展的抽象类“AbstractClass”。 应用程序类获取 impl1 或 impl2 以根据接收到的输入执行某些任务。
目前,我将这两个类注入(inject)到应用程序类中,如下所示。 然后根据输入,我要求 impl1 或 impl2 执行任务。
public class Application {
private static final Data data1 = DATA_CONFIG.data_1;
private final AbstractClass impl1;
private final AbstractClass impl2;
@Inject
Application(final AbstractClass impl1, final AbstractClass impl2){
this.impl1 = impl1;
this.impl2 = impl2;
}
public void mainTask(final Data data){
if(data == data1){
impl1.performTask();
}else{
impl2.performTask();
}
}
}
但是,有什么方法可以使用辅助注入(inject)或类似的概念来仅注入(inject)所需的依赖项,例如输入是 data1,我只注入(inject) impl1 而不是 impl2。?
最佳答案
因此,您想要的是根据注入(inject)点的某些上下文(特别是数据对象的值)来选择注入(inject)对象。我没有做过这样的事情,不能保证成功,但是你可以尝试custom injections .
您也可以执行类似 factory 的操作。但恕我直言,这种方法并不比原始方法好多少,因为它只是将 impl1 和 impl2 之间的选择移动到您必须首先创建的工厂类。
草图:
@Inject
Application(IAbstractClassFactory factory){
this.factory = factory
}
void mainTask(final Data data){
impl = factory.create(data)
}
关于java - 辅助注入(inject)根据运行时检查注入(inject)不同的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60412068/