选择在运行时弹出时要注入的实现
我有以下课程:
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); }