查找具有自定义注释的所有bean

时间:2016-09-17 01:21:17

标签: java-ee

我在Wildfly 10上使用Java EE,并希望创建一个名为@WorkflowFinished的注释,该注释具有在发生事件时调用的方法。

我希望能够拥有多个使用此注释的@Stateless EJB,当我的业务服务完成时,它应该搜索带有此注释的所有EJB并在其上调用方法。

我该如何解决这个问题?像这样:

public void process(SomeBean b){
   b.doSomething();

   List<?> listOfAnnotatedBeans = getAnnotatedEJBs(WorkflowFinished.class);

   for(? ejb : listOfAnnotatedBeans){
      ejb.someMethod(b);
   }
}

如何在EJB上下文中执行此操作, NOT Spring

1 个答案:

答案 0 :(得分:5)

您可以遍历当前&#34;上下文中的所有bean&#34;使用特定的注释或注释数组,如下所示:

import com.some.WorkflowFinished;
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager;
import javax.enterprise.util.AnnotationLiteral;

@Inject
BeanManager beanManager;
for (Bean<?> bean : beans) {

Set<Bean<?>> beans = beanManager
    .getBeans(Object.class,new AnnotationLiteral<WorkflowFinished>() {});

这可能是你的getAnnotatedEJBs方法的良好基础。

请注意,您需要将注释保留策略设置为RUNTIME。