gpt4 book ai didi

java - CDI 和 EJB 如何比较?互动?

转载 作者:IT老高 更新时间:2023-10-28 11:24:18 26 4
gpt4 key购买 nike

我很难理解两者如何相互作用以及它们之间的界限在哪里。它们重叠吗?它们之间有冗余吗?

我知道两者都有相关的注释,但我无法找到包含简短描述的完整列表。不确定这是否有助于弄清楚它们的不同之处或重叠的地方。

真的只是一头雾水。我(认为我)相当了解 EJB,我想我很难准确理解 CDI 带来了什么以及它如何取代或增强 EJB 已经提供的功能。

最佳答案

CDI:它是关于依赖注入(inject)的。这意味着您可以在任何地方注入(inject)接口(interface)实现。这个对象可以是任何东西,它可以与 EJB 无关。 Here是如何使用 CDI 注入(inject)随机生成器的示例。没有关于 EJB 的内容。当您想要注入(inject)非 EJB 服务、不同的实现或算法时,您将使用 CDI(因此您根本不需要 EJB)。
EJB:你确实明白,而且可能你被 @EJB 弄糊涂了。注释 - 它允许您将实现注入(inject)您的服务或其他任何东西。主要思想是,您注入(inject)的类应该由 EJB 容器管理。
似乎 CDI 确实了解 EJB 是什么,因此在符合 Java EE 6 的服务器中,在您的 servlet 中您可以同时编写

@EJB EJBService ejbService;
@Inject EJBService ejbService;
这就是让您感到困惑的原因,但这可能是 EJB 和 CDI 之间唯一的桥梁。
当我们谈论 CDI 时,您可以将其他对象注入(inject) CDI 托管类(它们应该由 CDI 感知框架创建)。
CDI 还提供什么...例如,您使用 Struts 2 作为 MVC 框架(只是示例),并且您在这里受到限制,即使使用 EJB 3.1 - 您不能使用 @EJB Struts action 中的注解,不受容器管理。但是当你添加Struts2-CDI插件时,你可以在那里写 @Inject同一事物的注释(因此不再需要 JNDI 查找)。通过这种方式,它增强了 EJB 的能力,但正如我之前提到的,你用 CDI 注入(inject)了什么——它是否与 EJB 相关并不重要,这就是它的能力。
附注。更新了示例链接

关于java - CDI 和 EJB 如何比较?互动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4684112/

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