[英]Is it possible to inject a list of beans implementing an interface using Java EE
我想知道,如果我可以注入一个(无状态)bean列表,那些都实现了一个特殊的接口。
例如,我有一个模块合同
public interface ResetService {
void reset(MyContext context);
}
比我有两个模块,正在实现这个接口。 还有一个模块应该调用所有实现:
@EJBs
private List<ResetService> resetServices;
void resetAllModules(MyContext context) {
for (ResetService resetService : resetServices)
resetService.reset(context);
}
重要的是所有呼叫都在主事务中,并且如果重置呼叫完成,则必须知道重置呼叫者。 所以我不能使用JMS和主题。
我想,这不可能,或者?
首要答案是错误的。 您可以使用@Any annotation和javax.enterprise.inject.Instance类注入dynamicaly。 这里有简单的例子http://coders-kitchen.com/2013/01/24/jee-and-dynamic-dependency-injection/
您可以通过以下方式获取所有类型的bean:
@Inject
BeanManager beanManager;
public Set<ResetService> getAllResetServices() {
return beanManager.getBeans(ResetService.class);
}
注释不可能。 这里最好的选择是循环遍历JNDI名称1的数组,并为每个名称执行JNDI查找以提供List
。 为以防万一,或许看看像前面问题的这一个 ,如果你想尝试使事情变得更加动态的(我不相信这将是一个不错的主意)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.