如何在 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。这解决了我的问题。
我们有一个基于 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。这解决了我的问题。