CDI容器如何适合Java EE服务器的EJB / Web容器?

时间:2016-12-07 09:24:27

标签: java-ee cdi ioc-container

Java EE服务器具有不同的容器,如EJB或Web容器: enter image description here

然而,我发现了有关如何集成CDI组件的不同信息。在照片some中说CDI容器(“ CDI容器自动管理范围内的所有bean ”),但其他人将其定义为Java EE容器提供的上下文服务。在stackoverflow上,甚至还有一个名为“IOC-Container”的标签。那么,如果它是一个容器,那么EJB / Web容器中的容器部分/内部是什么?

因此,如果我用其组件和容器绘制Java EE服务器的图片(如上图所示),CDI如何适应那里?它是否获得自己的容器“矩形”或者它是某个EJB / Web容器的一部分?你会如何在建筑设计中绘制它?你会如何解释/描述它?

1 个答案:

答案 0 :(得分:2)

CDI有一个单独的容器。在你的图片中,它很可能是EE服务器端的另一个单独的矩形。谈到EE环境,CDI由EE容器(通常是RI-Weld)提供,因此容器将在(第一次)应用程序部署时为您启动。

话虽如此, CDI容器是每个EE服务器一个。即使您部署了多个使用CDI的WAR应用程序,仍然会有一个CDI容器。请注意,在SE环境中(Weld SE允许您在SE环境中使用CDI),如果您愿意,可以使用多个此类容器。

与EJB和JSF等其他EE东西的集成。例如,它们允许您使用基于CDI功能的@Stateless@ViewScoped。所以他们必须与CDI"以某种方式"整合。现在,这种魔法在EE容器内完成,通常是通过提供商的(焊接)SPI。例如,容器负责处理EJB bean,然后将它们(通过SPI)交给Weld,然后Weld可以将它们作为CDI bean接收,允许您@Inject进入@Stateless bean。显然,以上是对实际情况的简化。