基于Spring4 Annotation的密钥获取bean

时间:2016-10-26 14:01:38

标签: java spring

我使用WebApplicationInitializer配置了Spring 4。有两个名为Item1ServiceItem2Service的服务。

但是在控制器中我需要根据用户提供的密钥找到一个服务。 如果有基于xml的配置,那么我可以通过id。

但是如何在控制器中获取AnnotationConfigWebApplicationContext对象,以便我可以根据密钥获取我的bean。

我用过 @Service(value="item1")@Service(value="item2")

请帮我解决这个问题

2 个答案:

答案 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;