从其他模块使用弹簧豆?
问题描述:
我想这很简单 - 但我无法找到正确的搜索条件组合来获得答案。如果我有一个多模块应用程序,我怎么在模块A豆提供给模块B.豆从其他模块使用弹簧豆?
项目设置看起来有点像这样:
project.ear/module-a.jar/resources/beans.xml
project.ear/module-a.jar/java/foo/bar.class
project.ear/module-b.war/java/foo/barFactory.class
的beans.xml文件无法通过类路径或文件系统访问。有没有办法做到这一点?或者我应该以不同的方式做所有事情
答
我认为有比上面提到的这三位skaffman更容易解决。
-
放入一个模块b.war/WEB-INF/web.xml中这些行:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:/resources/beans.xml
</param-value>
</context-param>
这能使来自任何一块类路径的每加载/resources/beans.xml(即任何类路径上的jar),这对你来说已经足够了。
您应该加载一个module-a.jar作为module-b.war(module-a.jar驻留在module-b.war/WEB-INF/lib位置)的一部分。
我已经在我的项目非常相似粒度:企业logic.jar其bean的配置和frontend.war它使用通过REF =‘someBean’以前的一个配置的bean。有用。
答
您的应用程序服务器可能对您的EAR中的每个模块使用不同的类加载器,从而阻止一个模块在另一个模块中看到资源。这是JavaEE类加载器的默认行为。
您可能需要
- 重新配置应用程序服务器使用在整个EAR“统一”的类加载器(这是高度应用服务器特有的,但伟大的,如果你能得到它的工作),或
- 将所有内容打包成一个模块(例如,您的WAR可以包含所有内容),或者为WAR模块声明一个正式清单,允许它声明其对各个JAR模块的依赖关系,这应该允许WAR查看资源在JAR模块中。