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