我有一个应用程序类“ Application”,一个抽象类“ AbstractClass”由“ Impl1”和“ Impl2”扩展。应用程序类根据收到的输入获取impl1或impl2来执行某些任务。
当前,我将两个类都注入到应用程序类中,如下所示。然后根据输入,我要求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();
}
}
}
但是,有什么方法可以使用辅助注入或类似的概念来仅注入所需的依赖项,因此,例如,输入为data1,我仅注入impl1而不注入impl2。??
因此,您要根据注入点的特定上下文选择注入的对象-特别是Data对象的值。我没有做这些事情,也不能保证成功,但是您可以尝试custom injections。
此外,您也可以执行factory之类的操作。但是恕我直言,这种方法并没有比原始方法好多少,因为它只会将在impl1和impl2之间的选择移动到您必须首先创建的工厂类。
素描:
@Inject
Application(IAbstractClassFactory factory){
this.factory = factory
}
void mainTask(final Data data){
impl = factory.create(data)
}