如何在 Java EE 6 (WebSphere 8.5) 中使用 Spring 的依赖注入?

How to use Spring's Dependency Injection in Java EE 6 (WebSphere 8.5)?

我们有一个基于 Spring 的应用程序,它由几个 Java EE 5 Web 模块组成,并且在 WebSphere Application Server 8.5 中运行良好。我们使用来自 javax.inject 的标准注释,例如 @Inject。 Spring 根据 Spring xml 文件中的 bean 定义解决了这个问题。

现在,如果我们将应用程序升级到 Java EE 6,应用程序服务器的 CDI 将尝试解析 @Inject 必须失败,因为我们所有的 bean 都在 Spring 上下文,而不是 CDI 上下文(我们没有 beans.xml)。

是否可以强制 Spring 继续处理 Java EE 6 容器 (WebShpere 8.5) 中的 @Inject? IE。禁用 CDI?还是升级到 Java EE 6 会强制我们使用 CDI?

如果您的部署存档中没有 beans.xml,那么 CDI 将不会启动并让 Spring 核心运行。

我在 WebSphere Liberty V17.0.0.2 上遇到了同样的问题。

在我的例子中,类路径中也有 no beans.xml,但 Weld CDI 仍然在 Spring 之前跳入(这是一个 Spring 的 JSF 应用程序)。

我停用焊接注释扫描的方法是将以下 beans.xml 添加到应用程序 WEB-INF 文件夹中:

<?xml version="1.0" encoding="UTF-8"?>
<beans ... version="1.1" bean-discovery-mode="none">
</beans>

如您所见,bean-discovery-mode 属性已设置为 none。这解决了我的问题。