在没有焊接的情况下初始化 Java CDI?

mic*_*cah 1 java dependency-injection cdi weld

如果我理解正确,Java CDI 应该独立于 Weld。但是我看到的所有示例都使用 Weld 来初始化容器。

我试图在没有 Weld 的情况下使用 CDI,因为虽然我想使用 DI,但我的内存非常有限。

这是我的 LoggerFactory 的一个例子-

@ApplicationScoped
public class LoggerFactory {

    @Produces
    @Singleton
    public Logger getLogger() {
        return LogManager.getLogger("com.myapp");
    }

}
Run Code Online (Sandbox Code Playgroud)

我试图在 Main- 中获取它

Logger logger = CDI.current().select(Logger.class).get();
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我得到Unable to locate CDIProvider.

是否可以在没有额外库的情况下使用 CDI?在这种情况下如何获取我的记录器?

Ste*_*ann 5

CDI 是 Java EE 规范。它指定了事情应该如何做,但它本身不提供功能。

Weld 是 CDI 规范的参考实现。例如,CDI 的另一种实现是 Apache OpenWebBeans。这些实现中的任何一个都可以为您提供 CDI 的功能。

Weld 提供了一个可以在 Java SE 中启动 CDI bean 管理器的扩展:https : //docs.jboss.org/weld/reference/latest/en-US/html/environments.html#weld-se

但是要小心,因为根据我的经验,Weld SE 会消耗大量内存,并且需要一些时间来扫描(更大的)SE 应用程序的类路径。