【问题标题】:CDI: get reference to beanManager via static methodCDI:通过静态方法获取对 beanManager 的引用
【发布时间】:2015-05-29 05:43:56
【问题描述】:

我在 java se 上使用weld+paxcdi。我可以使用

获得对 beanManager 的引用
@Inject
BeanManager beanManager;

但是,很明显,我只能在由 CDI 容器管理的对象中使用这种方式。如何在 new 创建的对象中获取对 beanmanager 的引用?

【问题讨论】:

  • CDI.current().getBeanManager() 不工作吗?参照。 blogs.oracle.com/arungupta/entry/…
  • @Hein Blöd 抛出原因:java.lang.IllegalStateException: Unable to access CDI at javax.enterprise.inject.spi.CDI.current(CDI.java:65)
  • 我忽略了您使用的是 Java SE;那么,您是否按照reference manual 中的说明进行操作?

标签: java cdi jboss-weld pax


【解决方案1】:

我认为这个问题是指 OSGi,否则使用 Pax CDI 是没有意义的。

Pax CDI 创建一个单独的 CDI 容器,因此每个 bean 包都有一个单独的 bean 管理器。因此,当前 bean 管理器应该是什么并不十分明显。

从 Pax CDI 1.0.0.RC1 开始,如果方法目标是调用类中的注入点,则在从 OsgiServiceProvider 方法调用时,CDI.current() 返回一个有意义的值。 CDI.current() 否则未定义。

Pax CDI 0.x 基于 CDI 1.0,因此不支持 CDI.current()

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2016-03-01
  • 2013-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-30
  • 1970-01-01
相关资源
最近更新 更多