从其他模块使用弹簧豆?

问题描述:

我想这很简单 - 但我无法找到正确的搜索条件组合来获得答案。如果我有一个多模块应用程序,我怎么在模块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更容易解决。

  1. 放入一个模块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),这对你来说已经足够了。

  2. 您应该加载一个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模块中。