CDI:
关于依赖注入。这意味着您可以在任何地方注入接口实现。该对象可以是任何东西,可以与EJB不相关。这是一个如何使用CDI注入随机生成器的示例。与EJB无关。当您要注入非EJB服务,不同的实现或算法时,将使用CDI(因此您根本不需要EJB)。
EJB: 您确实了解,并且
@EJB注释可能使您感到困惑-
它使您可以将实现注入到您的服务或任何其他内容中。主要思想是,您在其中注入的类应由EJB容器管理。似乎CDI确实了解EJB是什么,因此在Java EE
6兼容服务器中,您可以在servlet中编写两个
@EJB EJBService ejbService;
和
@Inject EJBService ejbService;
那会让您感到困惑,但这可能是唯一的事情,那就是EJB和CDI之间的桥梁。
当我们谈论CDI时,您可以将其他对象注入CDI管理的类中(它们仅应由CDI感知框架创建)。
CDI还提供了什么…例如,您将Struts 2用作MVC框架(仅作为示例),并且即使在使用EJB 3.1的情况下也受到限制-
您不能
@EJB在Struts操作中使用注释,它不是由容器管理的。但是,当您添加Struts2-CDI插件时,您可以在此处
@Inject为同一内容编写注释(因此,无需进行其他JNDI查找)。这样,它可以增强EJB的功能,但是正如我前面提到的,您要使用CDI注入的内容-
它与EJB是否相关都没有关系,这就是它的功能。
PS。更新到示例的链接



