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

发布于 2024-10-16 13:05:03 字数 238 浏览 2 评论 0原文

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

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

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

I tried to use CDI for my struts action running on glassfish.
But java dependency injection does not work for it. It works for JSF but not struts.
As I read -- container injects dependencies to any instance of container managed bean (bean created by container).

So, what is "container managed bean"? Any POJO? Or only jsf back bean, ejb-bean and so on?

And how it happens? Glassfish has special class-loader to inject?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

◇流星雨 2024-10-23 13:05:03

我只能将您的 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);

问候

I only can inject your CDI beans in managed classes. Struts creates its own instances, so Struts beans are no container managed.

I don't know if Struts has a plugin able to inject CDI beans, but you can lookup the Bean Manager in JNDI tree.

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

In your application you can use this:

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

For each bean returned by getBeans method you need to get the bean reference

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

Regards

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文