我有一个依赖于其他两个模块的网络应用程序。
为简单起见,我们称它们为ServiceA
模块和ServiceB
模块。
这些模块中的每一个都有各种不同的依赖关系,并且对Entities
模块也有共同的依赖关系。
上面提到的每个模块都声明了自己的 spring 上下文文件,其中包含与其范围有关的信息。
我现在正试图决定如何在项目之间“连接”这些配置文件,我有点难过。
我知道一个选项只是在 web 应用程序的 web.xml 中(在contextConfigLocation
参数中)声明所有“结束”文件(即 ServiceA、ServiceB 和实体),但我不喜欢这个选项,特别是因为我的实际使用-case 更复杂,并且具有更多共享的内部依赖项。
我最初的意图是在contextConfigLocation
参数中只声明配置文件ServiceA
,ServiceB
因为这些是 web 应用程序直接依赖的唯一项目(通过查看 maven pom 很容易看到),然后同时拥有ServiceA
和ServiceB
在他们的 spring 上下文配置文件中包含这个指令<import resource="classpath:EntitiesContext.xml">
。这种方法的优点是它与 maven 传递方法一致,在该方法中我声明了我所依赖的内容,如果该模块依赖于某些东西,它会将它拖到一起。这种方法的问题是我在这里读到模块中的所有 bean 都Entities
将被创建两次(尽管最后只保留一个实例),这是一项昂贵且不需要的操作。
我非常想听听人们如何解决这个用例,因为我认为我没有遇到任何极端情况。
谢谢
更新
我最终使用的语法是classpath*:META-INF/*/*Context.xml
因为 Thomasz 建议的语法存在一些问题。
如需更多阅读,请参阅 spring 的错误报告(部分解决了该问题)和有关该问题的博客文章