我尝试将CDI用于在glassfish上运行的struts操作。 但java依赖注入不起作用。它适用于JSF,但不适用于struts。 正如我所读到的那样 - 容器将依赖项注入容器托管bean的任何实例(由容器创建的bean)。
那么,什么是“容器管理bean”?任何POJO?或者只有jsf back bean,ejb-bean等等?
它是如何发生的? Glassfish有特殊的类加载器可以注入吗?
答案 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);
此致