`
Frederick
  • 浏览: 117791 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring学习日记 - Spring的bean 配置文件路径问题

阅读更多
    在配置beans 的时候,可以使用 ContextLoaderListener 或者 ContextLoaderServlet搭配名为contextConfigLocation 的Context-Param,也可以在DispatchServlet的 init-param中定义。

    但是其中要注意的是,无论如何,当web容器初始化DispatchServlet的时候,都会去找这个它对于的配置文件。这个配置文件的默认位置和名字为/WEB-INF/servletname-servlet.xml。所以,即使已经使用了ContextLoaderListener或ContextLoaderServlet,配置文件 /WEB-INF/servletname-servlet.xml仍然是必须的。

    有时候我们需要自定义所有的配置文件,比如,我希望把所有的spring相关的配置文件都放在目录/WEB-INF/spring/底下,我还希望用文件名 appContent-servlet来取代 envoy-servlet.xml。举个例子:

我的配置文件web.xml的相关部分如下:
<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>
    /WEB-INF/config/appContent-servlet.xml
    /WEB-INF/config/appContent-service.xml
  </param-value>
</context-param>

<listener>
  <listener-class>
    org.springframework.web.context.ContextLoaderListener
  </listener-class>
</listener>

<servlet>
  <servlet-name>envoy</servlet-name>
  <servlet-class>
    org.springframework.web.servlet.DispatcherServlet
  </servlet-class>
  <load-on-startup>2</load-on-startup>
</servlet>

    注意,其中的/WEB-INF/config/appContent-servlet.xml其实就是原来默认名为/WEB-INF/envoy-servlet.xml的配置文件。
   
    我们希望这个配置可以工作。但是很可惜,它无法正常启动。
   
    为什么呢?原因就在于当web容器启动名为envoy的servlet的时候,它会尝试去加载bean定义配置文件。即使我们已经使用了ContextLoaderListener来加载bean定义,它仍然会发现没有人为这个servlet定义其默认的配置文件,所以它会去尝试使用默认的路径和名字去加载文件。这个路径就是/WEB-INF/envoy-servlet.xml。可是我们已经把这个文件改名并放在路径/WEB-INF/config/appContent-servlet.xml下了,web容器就会找不到文件,并报错。

那么,我们该怎么办才能正确的配置所有的加载文件呢?我们可以用servlet配置的子节点init-param,而不要ContextLoaderListener或者ContextLoaderServlet。我们还是举个例子:

新的配置文件web.xml的相关部分如下:
<servlet>
  <servlet-name>envoy</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
      /WEB-INF/config/appContent-service.xml,
      /WEB-INF/config/appContent-servlet.xml
    </param-value>
  </init-param>
  <load-on-startup>2</load-on-startup>
</servlet>

    显然,新的配置更加简洁,而且这一次当web容器名为envoy的servlet的时候,系统可以发现这个servlet需要的名为contextConfigLocation的参数在这里,就会用客户定义的路径去取代默认的路径。

    我的疑惑是,既然我们已经使用了context-param来定义contentConfigLocation这个变量,那么当web容器加载名为envoy的servlet的时候,就应该用这个路径来取代默认的路径才对,为什么事实却不是这样呢?

    我估计原因是spring并不是配置的这个路径来指明DispatchServlet的配置文件的路径,而是用这个路径来为ContentLoaderListener或者ContentLoaderServlet指明其配置文件的路径。所以DispatchServlet仍然需要在启动的时候去加载该servlet的配置文件,就导致了上面的结果。

    由于时间不够,没有去确认是否其真实原因,等以后有空再去确认吧。
分享到:
评论
3 楼 Frederick 2008-01-25  
个人认为,这个是spring-mvc的bug
2 楼 Frederick 2008-01-25  
你的说法其实就是我的第一段:
引用

在配置beans 的时候,可以使用 ContextLoaderListener 或者 ContextLoaderServlet搭配名为contextConfigLocation 的Context-Param,也可以在DispatchServlet的 init-param中定义。

我说的是,即使这样还不够。我看过源代码,DispatchServlet有读取配置文件的代码。如果你不配置<init-param>,就会去默认的路径下读取配置文件。
1 楼 chorpin 2008-01-25  
兄弟,你以上所说好像有点不准确吧,直接用
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/config/appContent-servlet.xml
/WEB-INF/config/appContent-service.xml
</param-value>
</context-param>
搭配上ContextLoaderListener 就可以正常工作了,并不一定要<init-param>节点的。你的不能正常使用,可能是一些别的原因吧

相关推荐

    spring-beans-3.0.xsd

    首先,`spring-beans-3.0.xsd`是Spring 3.0版本中的beans配置文件,它定义了一系列元素和属性,允许开发者声明、配置和管理bean。例如,`&lt;bean&gt;`元素是配置中最基础的部分,用于定义一个bean实例,包括其类名、初始...

    spring-aop-3.0.xsd spring-beans-3.0 spring-context-3.0.xsd spring-mvc-3.1.xsd

    `spring-context-3.0.xsd` 文件包含了在上下文环境中配置的各种元素,如消息源、事件监听器、AOP 配置、bean 的工厂方法等。这个文件对于实现高度自定义的 Spring 应用程序非常重要。 4. **spring-mvc-3.1.xsd**: ...

    官方原版完整包 spring-framework-5.3.6.RELEASE-dist.zip

    这些文档详细解释了如何配置和使用Spring,包括容器配置、bean定义、数据访问、事务管理、Web开发等方面的指导,是学习和解决问题的重要资源。 3. spring-5.3.6-schema.zip:这个文件包含了Spring Framework的XML ...

    spring入门学习-3、Bean装配(XML).pdf

    ### Spring入门学习之Bean装配(XML) #### Bean配置项详解 Spring框架的核心功能之一就是管理对象的生命周期,其中Bean装配是实现这一目标的关键技术。在Spring中,Bean配置项是定义Bean的重要组成部分,通过XML...

    官方完整包 spring-framework-5.3.7.RELEASE-dist.zip

    - **spring-5.3.7-schema.zip**:可能包含Spring配置文件的XML模式定义,有助于验证配置文件的正确性。 6. **使用流程**: - 解压压缩包,将所需的jar文件添加到项目类路径。 - 配置Spring的IoC容器,可以使用...

    spring-context-4.2.xsd.zip

    总结而言,`spring-context-4.2.xsd`是Spring 4.2版本Context模块的核心配置规范,它定义了Spring XML配置文件的结构,涵盖了bean定义、依赖注入、作用域、AOP、事件处理等多个方面的内容。理解并熟练运用`spring-...

    spring bean XML配置入门

    "spring-beans"是Spring中用于配置Bean的XML文件。该文件包含了一系列的&lt;bean&gt;元素,每个元素表示一个Java对象的定义,包括类名、属性值、初始化方法等。 4. **Bean的定义**: 在XML配置文件中,我们使用`&lt;bean&gt;`...

    intellij-spring-assistant-1.0.2.zip

    3. **配置文件检查**:SpringAssistant能够检查XML配置文件中的错误,如bean定义错误、属性缺失等,并给出相应提示,有助于及时发现并修复问题。 4. **快速导航**:通过插件,可以快速定位到相关的Spring Bean定义...

    spring配置文件----注解配置

    在早期的Spring版本中,所有的bean定义、依赖注入以及其他配置都存储在如`bsappConfig.xml`, `spring-config.xml`, `webapp-config.xml`等这样的XML文件中。这些文件通常位于项目的`src/main/resources`目录下,以便...

    spring-jdbc-4.2.xsd.zip

    在Spring的配置文件中,我们经常会看到xsd文件的身影,例如`spring-jdbc-4.2.xsd`,它是Spring JDBC模块的XML Schema定义文件,用于验证和解析与数据库交互的相关配置。 `spring-jdbc-4.2.xsd`是Spring 4.2版本的...

    spring-framework-4.1.6.RELEASE.rar

    spring-aop-4.1.6.RELEASE.jar spring-aspects-4.1.6.RELEASE.jar spring-beans-4.1.6.RELEASE.jar spring-context-4.1.6.RELEASE.jar spring-context-support-4.1.6.RELEASE.jar spring-core-4.1.6.RELEASE.jar ...

    spring-framework-4.3.5 所有JAR文件包

    综上所述,"spring-framework-4.3.5.RELEASE-dist" 包含了构建复杂Java应用程序所需的所有基本元素。每个JAR文件都对应Spring框架的一个或多个组件,开发者可以根据需求选择导入相应的库。这些JAR文件包括了Spring的...

    官方spring-framework-4.3.13.RELEASE完整包

    开发者可以在这里找到`spring-core`、`spring-beans`、`spring-context`、`spring-web`等核心模块,它们提供了依赖注入(DI)、面向切面编程(AOP)、上下文管理、Web支持等功能。此外,还包括了Spring对其他技术如...

    spring 3.2.4.RELEASE jar包

    spring-context-3.2.4.RELEASE.jar spring-core-3.2.4.RELEASE.jar spring-beans-3.2.4.RELEASE.jar spring-test-3.2.4.RELEASE.jar spring-web-3.2.4.RELEASE.jar spring-aop-3.2.4.RELEASE.jar spring-webmvc-...

    spring-framework-4.2.0.RELEASE官方完整包加官方文档

    至于`spring-framework-4.2.0.RELEASE-schema.zip`,它包含了Spring XML配置文件的XSD schema定义。这些schema定义了XML配置文件的结构和约束,帮助开发者编写正确格式的配置文件,避免语法错误。 总的来说,Spring...

    spring-modules-0.9.zip

    这个压缩包"spring-modules-0.9.zip"包含了0.9版本的Spring Modules,它在早期的Spring生态中扮演了重要的角色,帮助开发者更轻松地处理一些特定的集成问题。 首先,Spring Modules的核心特性之一是其验证...

    简单Spring框架模拟器--Demo

    “tiny-spring-step-4-config-beanfactory-with-xml.zip”继续深化,讲解了如何通过XML配置文件来配置BeanFactory,包括Bean的定义、属性注入、构造函数注入等,让你全面掌握BeanFactory的配置方式。 第五步,...

    Java开发学习(三)----Bean基础配置及其作用范围.doc

    - **bean标签**:`&lt;bean&gt;`标签是Spring配置文件中的基本元素,用于定义一个对象的实例。它包含了创建、初始化和配置对象所需的所有信息。 - **id属性**:`id`属性用于唯一标识一个bean,就像数据库中的主键一样。...

    Spring--2.Spring 中的 Bean 配置-4

    在`Spring--2.Spring 中的 Bean 配置-4-1.zip`文件中,你可能会看到类似以下的配置: ```xml &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=...

    struts2-spring-plugin-2.2.1.jar

    在没有Struts2-Spring-Plugin的情况下,要在Struts2应用中使用Spring,需要手动配置Action类与Spring Bean之间的关联。而有了这个插件,配置过程变得更加简单。以下是Struts2-Spring-Plugin-2.2.1.jar提供的主要功能...

Global site tag (gtag.js) - Google Analytics