我使用WebApplicationInitializer
配置了Spring 4。有两个名为Item1Service
和Item2Service
的服务。
但是在控制器中我需要根据用户提供的密钥找到一个服务。 如果有基于xml的配置,那么我可以通过id。
但是如何在控制器中获取AnnotationConfigWebApplicationContext
对象,以便我可以根据密钥获取我的bean。
我用过
@Service(value="item1")
和@Service(value="item2")
请帮我解决这个问题
答案 0 :(得分:1)
您应该能够将应用程序上下文自动装入控制器(或执行查找的任何位置),以便您可以使用用户提供的任何输入调用getBean
方法。
@Autowired
private ApplicationContext appContext;
然后在你的方法中:
MyService s = appContext.getBean(input);
答案 1 :(得分:0)
如果只有几个实现你必须选择,那么你还有一个选择。自动装配控制器中的所有服务,并根据密钥在运行时切换。 (注意:如果服务实现计数超过3,我不会更喜欢这个。它将使您的代码不可读,并且它将不必要地在控制器中创建服务引用变量)
@Autowired @Qualifier("item1") ItemService item1Service; @Autowired @Qualifier("item2") ItemService item2Service;