我想在多战Spring应用程序中共享公共应用程序上下文,所以我不需要一次又一次地定义bean。 但我不想在每个webapp 中实例化这个常见应用程序上下文中定义的bean。我只想实例化那些bean并由所有webapps共享。可能吗?我错了。
PS:这个常见的应用程序上下文存在于jar中,我将导入到每个webapps。
1,下面的文章告诉我们如何共享公共应用程序上下文,但需要在每个webapp中实例化这些bean。
How to import spring-config.xml of one project into spring-config.xml of another project?
2,下面是我刚读过的另一篇文章,我演示了它,但仍然没有得到我想要的东西,bean被实例化了两次。有人可以查看此部分“你为什么要使用它?”在文章中,我没有得到它,他们有没有解决方案,有人可以帮助我,非常感谢你的时间。
这是第二篇文章中的演示源代码:https://github.com/jasonluo/ceciic/tree/master/Research/multiple-contexts-sample
更新
case2的问题是因为我没有部署为ear文件,感谢Deinum指出这一点,我正在使用tomcat,所以没有办法实现它。
我们现在的解决方案是使用REST访问在单独服务器中运行的服务webapp。
答案 0 :(得分:1)
不要,通常会有类加载器隔离来防止这种情况发生。正确地执行此操作通常需要彻底了解类加载,Java EE,打包和服务器。
如果说有这样的方法可以执行此操作,如您发布的博客中所述。你必须:
lib/
文件夹而不是WEB-INF/lib
WAR的文件夹。即使这样,它依赖于服务器的实现细节。 AFAIK不保证在Java EE规范下工作。例如,它可能不适用于GlassFish。
<强>更新强>
我无法判断您的演示输出是否正确,因为我找不到构建文件。
是的,Tomcat不支持EAR,您可以使用非常相似的Apache TomEE并支持EAR(我不知道TomEE是否以某种方式进行类加载)。从理论上讲,你也可以在Tomcat中使用common classloader,但那将非常糟糕。
答案 1 :(得分:-1)
有一种方法可以使用Spring Dynamic Modules来实现,但它需要OSGi环境,这与简单的Tomcat完全不同。很少有文章值得一读:
话虽如此,关于Spring与OSGi没有太多最新信息,但是值得尝试实现你所说的(当然,还有额外的性能成本)