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

mik*_*keb 4 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);
   }
}
Run Code Online (Sandbox Code Playgroud)

我该如何在EJB上下文而不是Spring中做到这一点?

Rob*_*kal 5

您可以遍历当前“上下文”中具有特定注释或具有以下注释的数组的所有bean:

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>() {});
Run Code Online (Sandbox Code Playgroud)

因此,这可能是您的getAnnotatedEJBs方法的良好基础。

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