gpt4 book ai didi

java - WeldContainer 和 SeContainer

转载 作者:行者123 更新时间:2023-12-01 21:34:34 25 4
gpt4 key购买 nike

使用有什么区别:

WeldContainer se = new Weld().initialize();

SeContainer se = SeContainerInitializer.newInstance().initialize();

我只是想使用@Injection@Produce注解,但是我没有发现这两种初始化对象实例的方式有什么区别。

最佳答案

上下文和依赖注入(inject) (CDI) 是一种规范。这意味着它只定义了一个 API,不提供实现。这就是为什么您必须包括 Weld 等实现才能实际使用 API。 WeldContainer 类是特定于供应商的,而 SeContainer 接口(interface)是规范的一部分。前者实现后者。

作为 API 一部分的 SeContainerInitializer 类将委托(delegate)给应用程序中包含的实现。因此,如果您使用 Weld 作为实现,那么最终使用 SeContainerInitializerSeContainer 与使用 WeldWeldContainer“引擎盖下”。

从纯粹主义者的角度来看,最好只依赖规范的接口(interface),永远不要直接依赖实现。这样您就可以在需要时更换供应商,因为您使用的是所有实现的通用功能。然而,通常实现提供的功能比规范要求的要多。为了使用该功能,您必须直接依赖于实现。

换句话说,您是使用 Weld/WeldContainer 还是 SeContainerInitialializer/SeContainer 取决于(当前和 future )您的应用程序的要求。如有疑问,program to the interface .

请注意,API 和实现之间的这种分离并不是 CDI 独有的。几乎整个 Java EE(或者现在已知的 Jakarta EE)API 都是以这种方式工作的。一个例子是 Java Persistence API (JPA) 和 HibernateEclipseLink(两个实现)。例如,Java SE 中有 Java 数据库连接 (JDBC) API 和各种实现(即驱动程序)。

关于java - WeldContainer 和 SeContainer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62131224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com