java - 辅助注入(inject)根据运行时检查注入(inject)不同的依赖项

标签 java dependency-injection guice assisted-inject

我有一个应用程序类“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/

相关文章:

java - Java 中私有(private)构造函数如何实现发布安全

java - 创建实体标签,但它为空

java - jar 和源中的命名注释失败

dependency-injection - RavenDB 和构造函数注入(inject)

dependency-injection - 注入(inject)与子组件相同类型的父组件

dependency-injection - 通过构造函数注入(inject)和通过 Guice 的字段注解注入(inject)有什么区别?

java - 找到一对 QuadCurve2D 的交点

java - 吉斯与 parent

android - RoboGuice 注入(inject)不同的 SharedPreferences

java - 如何在 YAML 文件中为简单的 POJO 定义映射?