当前位置: 首页 > 面试题库 >

选择在运行时注入哪种实现

阙繁
2023-03-14
问题内容

我有以下课程:

public interface MyInterface{}

public class MyImpl1 implements MyInterface{}

public class MyImpl2 implements MyInterface{}

public class Runner {
        @Autowired private MyInterface myInterface;
}

我想做的是确定应用程序已经运行时(即 在启动时)将哪个实施注入Runner

所以理想情况是这样的:

ApplicationContext appContext = ...
Integer request = ...

Runner runner = null;
if (request == 1) {
        //here the property 'myInterface' of 'Runner' would be injected with MyImpl1
        runner = appContext.getBean(Runner.class) 
}
else if (request == 2) {
        //here the property 'myInterface' of 'Runner' would be injected with MyImpl2
        runner = appContext.getBean(Runner.class)
}
runner.start();

做到这一点的最佳方法是什么?


问题答案:

@Component("implForRq1")和声明实现@Component("implForRq2")

然后将它们都注入并使用:

class Runner {

    @Autowired @Qualifier("implForRq1")
    private MyInterface runnerOfRq1;

    @Autowired @Qualifier("implForRq2")
    private MyInterface runnerOfRq2;

    void run(int rq) {
        switch (rq) {
            case 1: runnerOfRq1.run();
            case 2: runnerOfRq2.run();
            ...

        }
    }

}

...

@Autowired
Runner runner;

void run(int rq) {
    runner.run(rq);
}


 类似资料:
  • 问题内容: 我正在使用带有注释的Spring Bean,并且需要在运行时选择其他实现。 例如,我需要Windows平台,我需要Linux平台。 目前,我只知道一种可怕的解决方案: 请考虑我仅使用注释,而不使用XML配置。 问题答案: 您可以将bean注入移动到配置中,如下所示: 或者,您可以使用配置文件和,然后用注释(如或)注释您的服务实现,并为您的应用程序提供此配置文件之一。

  • 问题内容: 似乎只有少数JVM是Java实时规范(RTSJ)的实现。Sun / Oracle Java Real- TimeSystem的价格超过6000美元,IBM的实时WebSphere的价格超过7000美元,因此许多Java开发人员可能永远都没有机会使用它们中的任何一个。甲骨文的JRockit似乎是一个免费的实时Java实现,具有可预测的确定性行为,尽管我不确定,因为他们的文档非常注重营销语

  • 我使用log4j2.9 我在log4j2.xml中配置了文件追加器。 我在Runtiime找不到任何如何选择appender的例子。 你能给我举个简单的例子吗?

  • 问题内容: 我在应用程序中有两个主要课程。当我将其打包到一个可运行的jar(使用Eclipse导出功能)时,我必须选择一个默认的主类。 有没有一种方法可以在运行时从jar访问非默认主类? 问题答案: 您可以通过和访问。jar中的默认主类用于通过调用应用程序时。 有关更多详细信息,请参见JAR_(file_format)。在Eclipse中选择主类时,将在其中进行设置:jar文件清单中jar清单的内

  • 然后再次运行,但它也转到GPU0。 我看了相关的问题,如何选择指定的GPU来运行CUDA程序?但是命令不在CUDA 8.0 bin目录中。除了之外,我还看到其他文章引用了环境变量但这些都没有设置,我也没有找到关于如何使用它的信息。 虽然与我的问题没有直接关系,但使用我能够使应用程序在GPU1上运行,但使用不能在GPU0和1上运行。 我正在一个使用bash shell运行的系统上测试这一点,该系统在

  • 问题内容: 我有这样的现有功能 该表有四列来存储整数值,我正在使用上述功能分别读取它们。 现在,我将其转换为Entity Framework。 但是上面的函数返回一个错误 输入的字符串格式不正确 因为它返回列名本身。 我不知道如何解决这个问题,因为我是EF的新手。 任何帮助,将不胜感激 谢谢 问题答案: 这可能有助于解决您的问题: 现在,该方法适用于动态输入方法参数。