簡體   English   中英

Spring 配置

[英]Spring Configuration

我一直在閱讀 Spring 並且它一直在談論您需要的 spring 配置數據,但是您將這個 xml 文件放在哪里? 你把它保存成什么? 我似乎無法在任何地方找到這些信息。

比在哪里更重要的是,問題應該是給你的:這個“配置數據”到底是什么?

文檔

Spring IoC 容器使用一種形式的配置元數據; 此配置元數據表示您作為應用程序開發人員如何告訴 Spring 容器實例化、配置和組裝應用程序中的對象。

配置元數據傳統上以簡單直觀的 XML 格式提供,本章大部分內容都使用這種格式來傳達 Spring IoC 容器的關鍵概念和特性。

但是,您也可以使用注釋基於 Java 的配置來為您的 POJO 提供配置元數據。

在 Spring 中,構成應用程序主干並由 Spring IoC 容器管理的對象稱為 bean。 bean 是由 Spring IoC 容器實例化、組裝和以其他方式管理的 object。 否則,bean 只是應用程序中的眾多對象之一。 Bean 以及它們之間的依賴關系反映在容器使用的配置元數據中。

正如 Tnem 已經提到的, 在這里您可以找到如何在不同場景中實例化容器。

這個 IoC 容器是什么?

IoC(控制反轉)和 DI(依賴注入)是Martin Fowler創造的術語,關於 Spring 參見文檔的第一部分

如果您想使用 Spring 進行開發,我鼓勵您閱讀整個參考資料。

比純名稱更有趣的是如何拆分文件(並為每個部分命名)。

如果您有一個沒有測試的獨立或 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和 webmvc-config.Z0F635D0E0F3874FFF8A7B581C132E6 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 的東西。 但在大多數情況下,這還不夠。 例如,您想使用 Inmemory 數據庫運行一些快速測試,同時使用諸如 MySql 之類的持久數據庫運行普通應用程序(請不要因為那句話責備我),或者您想在生產中使用 jndi 配置的數據庫和“正常”配置一個用於測試。 所以你需要的是兩種不同的配置。 要不是每件事都寫兩次,最簡單的方法是將applicationContext.xml拆分為兩個文件:

  • applicationContext.xml用於沒有與測試不同的數據庫內容的核心內容
  • applicationContext-db.xml用於生產數據庫配置(例如用於數據庫連接的 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

如果您有 spring 配置的其他方面,其中測試和生產配置不同(例如調度程序),那么您可以以相同的方式拆分它。

我希望您了解拆分、命名約定和位置如何協同工作。

好吧,如果有一個“官方”名稱,那么我想它應該來自 Spring 人自己。 Spring 設置符合 Spring 項目的選擇工具是 Roo,在那里我們發現SRC_MAIN_RESOURCES/META-INF/spring/applicationContext.xmlSRC_MAIN_RESOURCES是 Maven2 項目中的占位符src/main/resources )。

這取決於您的應用程序是什么,有些應用程序支持 Spring 的配置,在這種情況下您需要檢查框架文檔。

如果它是一個獨立的應用程序,那么您可以將文件放在任何地方,但通常它放在

src/main/resources

resources中的子目錄。

Spring 文檔的第 3.2.2 節向您展示了如何實例化ApplicationContext

正如其他人指出的那樣,Spring 配置文件的名稱不是很重要。 真正的問題是如何加載這個文件。 在獨立應用程序中,您可以使用 ClassPathXmlApplicationContext class 之類的東西明確地執行此操作,如Spring 文檔的這一部分中所述

在 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 元素中指定多個配置文件,方法是用空格分隔它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM