spring - Spring bean 配置文件在 Maven WAR 模块中的位置?

标签 spring maven-2 configuration servlets war

我查看了一堆示例项目,但似乎无法梳理出常见的最佳实践。我见过 Spring bean 配置文件有时会进入 src/main/webapp/WEB-INF。目录。我已经结合 web.xml 中的 Servlet 定义看到了这一点。像这样:

<servlet>
    <servlet-name>my-stuff</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/my-stuff-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

但是我也看到了包含在 web.xml 中的 bean 配置文件。顶层——即在 Servlet 之外。这是什么意思?这是针对跨 Servlet bean 的吗?有时它在 src/main/webapp/WEB-INF目录,有时它位于 src/main/resources .我还看到了在 WAR 模块中定义的其他 bean 配置文件,其中几乎所有内容都在 src/main/resources 中。 .

我已经阅读并重新阅读了 Spring 文档,但我发现的唯一约定是默认情况下 Servlet 上下文配置文件应该在 src/main/webapp/WEB-INF 中。名为 {servlet-name}-servlet.xml 的目录.

那么最佳实践是什么,为什么?

最佳答案

Spring 中的应用程序上下文可以形成层次结构,其中子上下文可以访问父上下文中定义的 bean。

典型的 Spring MVC Web 应用程序包含具有两个级别的层次结构:

  • ContextLoaderListener 加载的根 Web 应用程序上下文.
    此上下文的配置位置是 applicationContext.xml默认情况下,可以使用 <context-param> 进行配置命名为 contextConfigLocation ,即在 web.xml 的顶层.此上下文通常包含核心应用程序逻辑。
  • DispatcherServlet 加载的 Servlet 特定上下文.它的配置位置默认为 <servletname>-servlet.xml并且可以使用 <init-param> 进行配置命名为 contextConfigLocation ,即在 servlet 级别。这个上下文通常包含一个 Spring MVC 相关的东西( Controller 等),因为 DispatcherServlet是 Spring MVC 的一部分。

  • 后一个上下文是前一个的子上下文。

    如果 Web 应用程序不使用 Spring MVC 作为表示框架,则它没有 DispatcherServlet及其上下文。一些极其简单的 Spring MVC 示例没有 ContextLoaderListener和根上下文(但是,您需要根上下文来实现跨 servlet 功能,例如 Spring Security)。

    Web 应用程序的配置文件默认位于 webapp 的根文件夹中。但是,它们可以放在类路径中(即在 src/main/webapp 中),在这种情况下,它们可以通过 classpath: 访问。字首。如果您打算在没有 servlet 容器的集成测试中使用其中一些文件,这可能会很有用。还有classpath:当您想从单独的工件(即 /WEB-INF/lib 中的 jar 文件)加载配置文件时,前缀可能很有用。 .

    关于spring - Spring bean 配置文件在 Maven WAR 模块中的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3703389/

    相关文章:

    java - Maven 不会使用公钥进行部署

    php - 为什么 Visual Studio Code 显示用户设置而不是运行 PHP 文件?

    java - 将当前日期字符串注入(inject) Spring bean 配置中

    spring - 使用 Reactive MongoDB 进行流式传输并且正在取消耗时操作

    java - 记录从无法进一步修改的 Web 服务收到的响应

    java - 如何从maven插件使用的类路径中排除项目依赖

    asp.net - <assemblyBinding> 在父 web.config 中被忽略

    java - Spring 社会融合

    json - 如何在 Spring Boot 中覆盖默认的 JSON 响应

    java - 如何从 Maven 中的属性文件生成枚举?