0

我有一个应用程序类“Application”,一个由“Impl1”和“Impl2”扩展的抽象类“AbstractClass”。应用程序类根据接收到的输入获取 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.??

4

1 回答 1

0

因此,您想要的是根据注入点的某些上下文来选择注入对象 - 特别是 Data 对象的值。我没有做这样的事情,不能保证成功,但你可以尝试自定义注入

你也可以做类似factory的事情。但是恕我直言,这种方法并不比原始方法好多少,因为它只会将 impl1 和 impl2 之间的选择移动到您必须首先创建的工厂类。

草图:

@Inject
Application(IAbstractClassFactory factory){
    this.factory = factory
}

void mainTask(final Data data){
    impl = factory.create(data)
}
于 2020-03-11T12:49:46.117 回答