我有一个多模块maven项目。其中一个模块是一个包含一些spring bean的util层。我想在其他模块中共享相同的 spring bean。
其他模块部署为非相关网络应用程序,因此理想情况下,我的util bean将是单例,我只会在所有网络应用程序中对这些单例进行一次参考。
我找到了一些用于共享spring web应用程序上下文的链接,但似乎它们在同一个.ear中工作,但在我的情况下,我有不同的Web应用程序。
有没有办法实现这个目标?
答案 0 :(得分:4)
不容易。应用程序服务器每个应用程序使用一个类加载器,这意味着即使您设法将创建bean的引用传递给另一个bean,您也会获得ClassCastException
。
您需要的是在应用服务器启动时定义bean。将bean的代码放入app服务器的类路径中,并检查文档如何设置JNDI上下文。 JNDI上下文允许您共享全局资源(如数据库连接)。
答案 1 :(得分:2)
我假设你指的是像this这样的技巧。据我所知,在EAR之外应该是可能的。但它没有官方标准。实际上,您必须确保在您的servlet容器的共享上下文加载器中加载Spring JAR文件,并在各个应用程序的上下文中加载 not 。我相信XML文件也需要在父上下文的类路径中。
答案 2 :(得分:0)
根据应用程序服务器/ servlet容器,您可以谷歌搜索在webapps之间共享ServletContext的技术。 WebApplicationContext存储在ServletContext中,因此您将获得答案。