1

我尝试将 CDI 用于在 glassfish 上运行的 struts 动作。但是java依赖注入对它不起作用。它适用于 JSF,但不适用于 struts。正如我所读到的——容器将依赖项注入到容器管理的 bean 的任何实例(由容器创建的 bean)。

那么,什么是“容器管理 bean”?任何POJO?还是只有jsf back bean、ejb-bean等?

它是如何发生的?Glassfish 有特殊的类加载器可以注入?

4

1 回答 1

3

我只能在托管类中注入您的 CDI bean。Struts 创建自己的实例,因此 Struts bean 不是容器管理的。

我不知道 Struts 是否有能够注入 CDI bean 的插件,但是您可以在 JNDI 树中查找 Bean Manager。

public BeanManager getBeanManager() {
    try {
        Context jndiContext = new InitialContext();
        return (BeanManager) jndiContext.lookup("java:comp/BeanManager");
    } catch (NamingException e) {
        // handle the exception
    }
}

在您的应用程序中,您可以使用它:

BeanManager manager = BeanManagerUtil.getBeanManager();
manager.getBeans(MyClass.class); 

对于 getBeans 方法返回的每个 bean,您需要获取 bean 引用

CreationalContext ctx = manager.createCreationalContext(bean);
MyClass myClass = manager.getReference(bean, MyClass.class, ctx);

问候

于 2011-02-08T14:18:32.047 回答