弹簧配置

auw*_*all 16 xml spring

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

aba*_*ogh 10

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

来自文档:

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

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

但是,您也可以使用注释基于Java的配置来为POJO提供配置元数据.

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

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

这个IoC容器是什么?

IoC(控制反转)和DI(依赖注入)是Martin Fowler创造的术语,关于Spring看到文档第一部分.

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

  • 我也发现很难找到 Spring Web 应用程序中配置文件命名的参考。参考文献一直在谈论“beans”文件的内容,但没有提及其名称。阅读我发现它有一个 CoC 行为:它首先查找名为 applicationContext.xml 的文件。然后它查看 web.xml 上下文参数。搜索参考文献,从未提及“CoC”一词。我想就这个话题做出明确的回应。 (2认同)

Ral*_*lph 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 ,在webmvc-config.xml中找到WEB-INF/spring.那个位置是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>
Run Code Online (Sandbox Code Playgroud)

现在,您开始为应用程序的业务逻辑编写测试,而无需加载所有Web内容.但在大多数情况下,这并不是理所当然的.例如,你想在您运行,如MySQL的数据库永久正常应用程序(使用内存数据库运行一些快速测试,请不要怪我那句话),或者你想使用JNDI配置DB的生产和"normal"配置一个用于测试.所以你需要的是两种不同的配置.要写两次不是每件事,最简单的方法是拆分applicationContext.xml两个文件:

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

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

对于测试,您现在需要两个文件(您可以将它写在一个文件中,但我更喜欢两个).*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" />
Run Code Online (Sandbox Code Playgroud)

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

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

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


Tne*_*nem 0

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

如果它是一个独立的应用程序那么你可以将文件放在任何地方,但通常它放在

src/main/resources
Run Code Online (Sandbox Code Playgroud)

或 中的子目录resources

Spring文档的第 3.2.2 节向您展示了如何实例化ApplicationContext.

  • @aseychell 是的,真的,哇,我的行家方式如此根深蒂固:D (2认同)