繁体   English   中英

是否可以使用Java EE注入实现接口的bean列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM