Java ee 6 “究竟是什么?”;“容器管理对象”;在Java6EE世界里?

Java ee 6 “究竟是什么?”;“容器管理对象”;在Java6EE世界里?,java-ee-6,cdi,Java Ee 6,Cdi,我尝试在glassfish上运行struts操作时使用CDI。 但是java依赖注入并不适用于它。它适用于JSF,但不适用于struts。 正如我所读的——容器将依赖项注入容器管理的bean(由容器创建的bean)的任何实例 那么,什么是“容器管理bean”?有POJO吗?还是只有jsf后台bean、ejb bean等等 它是如何发生的?Glassfish有特殊的类装入器来注入吗 我只能在托管类中注入您的CDIBean。Struts创建自己的实例,因此Struts bean不是容器管理的 我不知

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

那么,什么是“容器管理bean”?有POJO吗?还是只有jsf后台bean、ejb bean等等


它是如何发生的?Glassfish有特殊的类装入器来注入吗

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

我不知道Struts是否有能够注入CDIBeans的插件,但您可以在JNDI树中查找Bean管理器

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);
问候

谢谢!但什么是“管理类”?为什么servlet是托管类而struts操作不是?当我说“托管”是“由容器管理和实例化”。您不需要使用“newmyservlet”手动创建servlet实例。Servlet的创建由容器管理。Struts类由Struts使用new实例化,所以容器不管理这些类。