通过通用接口将 EJB 注入列表

use*_*882 2 java dependency-injection ejb jndi jakarta-ee

我想自动查找 EJB 实例并将其从 EJB 容器注入到列表中。例子:

@EJBs
List<MyCommonInterface> beans;
Run Code Online (Sandbox Code Playgroud)

或者

List<MyCommonInterface> beans;

public MyClass() {
    beans = (List<MyCommonInterface>) context.findBeansByInterface(MyCommonInterface.class);
}
Run Code Online (Sandbox Code Playgroud)

这可能吗?

Jan*_*iel 5

使用 JEE6,您可以使用实例http://docs.oracle.com/javaee/6/api/javax/enterprise/inject/Instance.html

这样您就可以使用注入的上下文,例如

@Inject
private Instance<ICommon> ejbs;
Run Code Online (Sandbox Code Playgroud)

你可以迭代它:

    for(ICommon c : ejbs)
        c.doSomeThing();
Run Code Online (Sandbox Code Playgroud)

这里有一个像这样的例子

  public interface ICommon {
      void doSomeThing();   
  }
Run Code Online (Sandbox Code Playgroud)

我在 @Singleton 中使用 SLSB 和 SFSB 对其进行了测试。