什么是Java 6 EE世界中的“容器管理对象”?

时间:2011-02-08 10:51:45

标签: java-ee-6 cdi

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

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

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

1 个答案:

答案 0 :(得分: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);

此致