弹簧配置

时间:2011-06-08 18:45:26

标签: xml spring

我一直在阅读Spring,它一直在讨论你需要的弹簧配置数据,但是你把这个xml文件放在哪里?你把它保存为什么?我似乎无法在任何地方找到这些信息。

5 个答案:

答案 0 :(得分:10)

更重要的是,问题应该在哪里:这个'配置数据'究竟是什么?

来自docs

  

Spring IoC容器使用一种配置元数据;此配置元数据表示您作为应用程序开发人员如何告诉Spring容器在应用程序中实例化,配置和组装对象。

     

配置元数据传统上以简单直观的XML格式提供,本章大部分内容用于传达Spring IoC容器的关键概念和功能。

但是,您也可以使用annotationsJava-based configuration为POJO提供配置元数据。

  

在Spring中,构成应用程序主干并由Spring IoC容器管理的对象称为bean。 bean是一个由Spring IoC容器实例化,组装和管理的对象。否则,bean只是应用程序中许多对象之一。 Bean及其之间的依赖关系反映在容器使用的配置元数据中。

正如Tnem已经提到的,here您可以找到如何在不同场景中实例化容器。

这个IoC容器是什么?

IoC(控制反转)和DI(依赖注入)是由Martin Fowler创造的术语,关于Spring,请参阅first section of the docs

如果您想使用Spring进行开发,我建议您阅读完整的参考资料。

答案 1 :(得分:8)

比纯名称更有趣的是如何拆分文件(并为每个部分命名)。

如果您有一个没有测试的独立或Web应用程序,那么您可以将所有配置放在一个文件中。 - 但没有考试不应该是一种意见。

让我们假设您有一个带有测试的Web应用程序。

然后你应该将配置分成两个文件,一个用于纯java(没有web suff)配置,另一个用于包含WEB应用程序的所有其他内容。

我个人更喜欢将它命名为applicationContext.xml和webmvc-config.xml。 Web配置文件的默认名称(如果没有为Dispatcher Servlet指定)将为/WEB-INF/<servletname>-servlet.xml

我找到classpath:/META-INF/spring目录中的applicationContext.xml和WEB-INF/spring中的webmvc-config.xml。那个位置是Spring Roo的风格。它工作,但每个其他文件夹也可以工作。因为我使用maven文件的确切位置是:

  • /src/main/resources/META-INF/spring/applicationContext.xml
  • /src/main/webapp/WEB-INF/spring/webmvc-config.xml

核心applicationContext.xml加载了org.springframework.web.context.ContextLoaderListener,而Dispatacher Servlet加载了webmvc-config.xml。 web.xml

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:META-INF/spring/applicationContext*.xml</param-value>
</context-param>

<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
    <servlet-name>CFMA-SpringProject</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/webmvc-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

现在,您开始为应用程序的业务逻辑编写测试,而无需加载所有Web内容。但在大多数情况下,这并不是理所当然的。例如,当你使用像MySql这样的持久数据库运行普通的应用程序时,你想用内存数据库运行一些快速测试(请不要因为那句话而责备我),或者你想使用一个jndi在生产中配置了db,为测试配置了“normal”。所以你需要的是两种不同的配置。要写两次不是每件事,最简单的方法是将applicationContext.xml分成两个文件:

  • applicationContext.xml没有与测试不同的数据库内容的核心内容
  • applicationContext-db.xml用于高效的db配置(例如,对于db连接的jndi-lookup和用于MySql的LocalContainerEntityManagerFactoryBean)

现在您了解了web.xml中contextConfigLocation的模式

对于测试,你现在需要两个文件(你可以把它写在一个文件中,但我更喜欢两个)。  * testContext-h2DbConfig.xml该文件是applicationContext-db.xml的测试兄弟,但是测试数据库没有jndi。  * textContext.xml此测试用例中@ContextConfiguration引用的文件。此文件仅包含测试所需的配置导入。在这种情况下,它是:

<import resource="classpath:/META-INF/spring/applicationContext.xml" /> 
<import resource="classpath:/META-INF/spring/testContext-h2DbConfig.xml" />

因为我使用spring,所以这两个文件都位于/src/test/resources/META-INF/spring/testContext.xml

如果您有弹簧配置的其他方面,测试和生产配置不同(例如调度程序),那么您可以以相同的方式拆分它。

我希望您了解分割,命名约定和位置如何协同工作。

答案 2 :(得分:2)

好吧,如果有一个“官方”名称,那么我想它应该来自Spring家伙本身。并且Spring选择设置符合条件的Spring项目的工具是Roo,我们发现SRC_MAIN_RESOURCES/META-INF/spring/applicationContext.xml SRC_MAIN_RESOURCESsrc/main/resources是Maven2项目中{{1}}的地方人员)。< / p>

答案 3 :(得分:0)

这取决于您的应用程序是什么,一些应用程序支持Spring的配置,在这种情况下,您需要检查框架文档。

如果它是独立应用程序,那么您可以将文件放在任何位置,但通常将其放在

src/main/resources

resources中的子目录。

Spring docs的第3.2.2节显示了如何实例化ApplicationContext

答案 4 :(得分:0)

正如其他人指出的那样,Spring配置文件的名称并不是很重要。真正的问题是如何加载此文件。 在独立应用程序中,您可以使用类似ClassPathXmlApplicationContext类的内容显式地执行此操作,如this part of the Spring documentation中所述。

在Web应用程序中,这通常通过添加配置侦听器的定义以及可能的配置文件在web.xml文件中进行配置。这是我使用的设置:

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:appContext.xml</param-value>
    </context-param>
<listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>

这允许我将配置文件放在我喜欢的任何地方,只要它在应用程序的类路径上。您甚至可以在param-value元素中指定几个配置文件,方法是用空格分隔它们。