是否有可能毁掉 CDI 瞄准镜?

2024-02-21

我正在开发一个 Java EE 应用程序,主要是带有 JSF 管理控制台的 JAX-RS,它使用 CDI/Weld 进行依赖项注入javax.enterprise.context.ApplicationScoped http://download.oracle.com/javaee/6/api/javax/enterprise/context/ApplicationScoped.html对象。撇开小调试问题不谈,CDI 在这个项目中表现得非常出色。

现在我需要对 CDI 注入的对象生命周期进行一些非常粗粒度的控制。我需要具备以下能力:

  • 从应用程序上下文中删除注入的对象,或者
  • 销毁/删除/清除/重置/删除整个应用程序上下文,或者
  • 定义我自己的@ScopeType并实施Context http://docs.jboss.org/weld/reference/1.0.0/en-US/html/scopescontexts.html#d0e1654我可以在其中提供执行上述两项任务之一的方法。

我完全意识到,这即使不是违背了 CDI 和依赖注入的本质,也是跨越的。我只是想知道

  • 这远程可能吗?
  • 如果是,完成工作的最简单/最简单/最快/最简单的最佳方法是什么?

焊接参考文档第2.1.2节 http://docs.jboss.org/weld/reference/1.1.0.Final/en-US/html/beanscdi.html#d0e634

请记住,一旦 bean 被绑定 就上下文而言,它仍然存在于 上下文直到上下文是 被毁了。没有办法手动 从上下文中删除一个 bean。如果你 不想让豆子留在里面 无限期会话,考虑使用 另一种寿命较短的瞄准镜, 例如请求或对话 范围。

自定义范围示例将 viewscoped jsf 注释移植到 cdi http://www.verborgh.be/articles/2010/01/06/porting-the-viewscoped-jsf-annotation-to-cdi/

如果您确实不想采用自定义范围类型的路径..您可以使用非便携式方法通过使用BeanManager.getContext http://download.oracle.com/javaee/6/api/javax/enterprise/inject/spi/BeanManager.html#getContext%28java.lang.Class%29方法并将此上下文投射到焊接中抽象共享上下文 http://grepcode.com/file/repository.jboss.org/nexus/content/repositories/releases/org.jboss.weld.servlet/weld-servlet/1.1.0.CR2/org/jboss/weld/context/AbstractSharedContext.java?av=h可以访问 beanstore 或上下文的 cleanUp() 方法。

检查此线程以了解如何获得Bean管理器 http://seamframework.org/Community/UsingWeldGetBeanManagerFromGoogleAppEngineServlet您的环境的实例

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否有可能毁掉 CDI 瞄准镜? 的相关文章

随机推荐