Java Maven项目中的每个模块都应该有自己的Spring应用程序上下文吗?

Java Maven项目中的每个模块都应该有自己的Spring应用程序上下文吗?,java,spring,maven,jakarta-ee,spring-mvc,Java,Spring,Maven,Jakarta Ee,Spring Mvc,我正在创建一个应用程序,其中我将项目分为不同的模块,例如(域、存储库、服务和web),以及许多用于邮件发送、文本格式设置等的通用maven项目。我还使用Spring 目前,我只有web项目中的Spring应用程序上下文文件。但是,由于我正在为文本格式等创建通用的pupose项目,这些项目封装了来自实际应用程序的库(例如freemarker),因此我不喜欢这样,我必须在web项目的Spring应用程序上下文文件中指定依赖于库的配置 问题在于为每个模块提供一个单独的Spring应用程序上下文文件,然

我正在创建一个应用程序,其中我将项目分为不同的模块,例如(域、存储库、服务和web),以及许多用于邮件发送、文本格式设置等的通用maven项目。我还使用Spring

目前,我只有web项目中的Spring应用程序上下文文件。但是,由于我正在为文本格式等创建通用的pupose项目,这些项目封装了来自实际应用程序的库(例如freemarker),因此我不喜欢这样,我必须在web项目的Spring应用程序上下文文件中指定依赖于库的配置

问题在于为每个模块提供一个单独的Spring应用程序上下文文件,然后在我使用它们的项目中导入上下文文件是否正确。这是正确的方法,还是有更好的方法


当我使用XML文件而不是JavaConfig时,我感兴趣的是如何解决这个问题。

我支持Boris Thespider关于基于注释的配置的评论

我对这个问题的解决方案是首先在模块(以及任何地方)中使用基于注释的配置

第二步是将父项目配置为组件扫描模块的包

最后,如果注释没有完全处理某些内容,则很可能需要仔细配置才能在父级内部工作


在基于注释的配置上。大多数情况下,可以使用一个或两个简单的注释来处理。检查可用于从属性等设置值的选项。

为所有模块创建
applicationContext.xml
配置并将其放置在模块中,然后从web模块从所有模块导入所有配置

web.xml
参考资料:


您可能应该使用基于XML的配置,而不是过时的配置。对于真正的抽象,您需要查看OSGI类型的布局,其中一个模块用于API(编译时依赖项),另一个模块用于代码(运行时依赖项)。您可以在代码模块中注释类,它们将通过类路径扫描自动获取。我现在无法更改为JavaConfig。使用XML时要做什么?可以使用带注释的基于XML的配置。您定义了在XML中扫描注释的包,Spring将自动获取注释。@Boristespider我使用的注释有
@Component
@Repository
等。但有时我使用XML通过名称空间激活Spring MVC。目前我无法将该配置移动到JavaConfig。那么我应该如何组织这些XML文件呢?我现在不能更改为JavaConfig。使用XML时该怎么办?根据我的经验,转换到annotations/JavaConfig可以顺利地、渐进地完成。经过几年的开发,您几乎没有任何XML。您可以将xml文件作为资源包含在模块中,并直接从父xml导入它们(如此处所示),或从web.xml导入它们(如@MariuszS answer所示)。
<!-- Context Configuration locations for Spring XML files -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath:/applicationContext-resources.xml
        classpath:/applicationContext-dao.xml
        classpath:/applicationContext-service.xml
        classpath*:/applicationContext.xml
        /WEB-INF/applicationContext*.xml
        /WEB-INF/cxf-servlet.xml
        /WEB-INF/security.xml
    </param-value>
</context-param>
mvn archetype:generate -B -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-modular-spring-archetype -DarchetypeVersion=3.0.0 -DgroupId=com.mycompany -DartifactId=myproject -DarchetypeRepository=http://oss.sonatype.org/content/repositories/appfuse