【问题标题】:java how to check if CDI is enabled?java如何检查是否启用了CDI?
【发布时间】:2020-04-20 23:11:41
【问题描述】:

如何检查当前环境(SE 或 EE)是否启用了 CDI?如果启用, CDI 应该用于实例化一个类(例如 Foo),否则使用 new Foo()。

Foo foo;
if (isCDIEnabled()) {
  // how to get CDI container from current environment
  foo = cdiContainer.select(Foo.class).get();
}
else
   foo = new Foo();

如何实现

 private boolean isCDIEnabled() {
     // how?
 }

【问题讨论】:

  • 检查cdiContainer是否为null
  • 没有。不知道如何获取 CDI 容器。
  • 问题的背景是什么?您的代码可以在 CDI 和非 CDI 环境中执行吗?
  • 是的。 CDI 和非 CDI。所以需要检查是否启用了CDI

标签: java dependency-injection cdi


【解决方案1】:

如果你的类路径中有 cdi api,试试这个:

    try{
        CDI.current();
    }catch(IllegalStateException e){
        // no cdi available 
    }

【讨论】:

  • 这在 SE 环境中有效吗? CDI 在 SE 中不可用,对吗?编译依赖是什么?
  • 如果您的 SE 环境包含 cdi-api jar,则可以使用。依赖的链接:mvnrepository.com/artifact/javax.enterprise/cdi-api/1.2。 P.S:我贴的是1.2版。检查您使用的版本。
  • 编译作品。但添加:runtimeOnly 组:'org.jboss.weld',名称:'weld-core',版本:'2.4.8.Final',仍然得到 java.lang.IllegalStateException:无法访问 CDI。什么是正确的 CDI 提供程序 impl?
  • 线程“主”java.lang.IllegalStateException 中的异常:无法在 java.util 的 javax.enterprise.inject.spi.CDI.lambda$getCDIProvider$1(CDI.java:88) 访问 CDI .Optional.orElseThrow(Optional.java:290) 在 javax.enterprise.inject.spi.CDI.getCDIProvider(CDI.java:88) 在 javax.enterprise.inject.spi.CDI.current(CDI.java:64)
  • CDI不可用时会抛出非法状态异常。
猜你喜欢
  • 2019-02-09
  • 2017-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 2011-10-03
相关资源
最近更新 更多