也许这似乎是一个愚蠢的问题,但我真的很困惑。 Seam 3和Weld CDI是一样的吗?我正在阅读一些涉及“CDI(Weld)/ Seam 3”的帖子,我应该将它们视为同一个东西吗?
答案 0 :(得分:7)
Seam 3严重依赖CDI(JSR-299)。 Weld是CDI的reference implementation。另一方面,Seam是用于开发Web应用程序的完整框架,具有大量功能(请参阅链接中的模块列表)。
通常,CDI实现由Java EE应用程序服务器提供(例如,JBoss / Wildfly与Weld一起提供)。但是,CDI的任何完整实现都应该适合与Seam一起使用。看到这张图片:
因此,您的问题的答案是否,但是Seam广泛使用Weld(或任何CDI实现)。这可能是您经常看到引用“CDI(Weld)/ Seam”的帖子的原因。
请注意,Seam 3的实现已经停止,可能是因为Java EE在这些年中已经有所改进。
这是来自Seam项目页面的Weld的信息:
Weld是JSR-299的参考实现(RI):Java EE平台的Java上下文和依赖注入(CDI)。 CDI是依赖注入和上下文生命周期管理的Java标准
此页面上还有以下信息:
- CDI是Java EE中包含的JCP规范
- Weld是CDI的参考实现
- Seam 3是一组扩展CDI以提供Java EE 6提供的功能的模块
最后,这应该告诉你:
然而,Seam 3是JSR-299的超集。将JSR-299视为Seam 3的核心 - 它是应用程序组件的基本编程模型,以及构成Seam框架的内置组件。 Weld是我们对这种编程模型的实现。