首頁>Program>source

將Spring的配置拆分為多个xml檔案的正確方法是什麼?

此刻我有

  • /WEB-INF/foo-servlet.xml
  • /WEB-INF/foo-service.xml
  • /WEB-INF/foo-persistence.xml

我的 web.xml 具有以下內容:

<servlet>
    <description>Spring MVC Dispatcher Servlet</description>
    <servlet-name>intrafest</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/foo-*.xml
        </param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
</servlet>
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
            /WEB-INF/foo-*.xml
    </param-value>
</context-param>

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

實際問题:

  • Is this approachcorrect/best?
  • Do I really need to specify the config locations both in the DispatcherServlet AND context-param 部分?

我需要記住什麼才能能够引用 foo-servlet.xml中定義的bean 来自 foo-service.xml ? 這与指定 contextConfigLocation有關吗 在 web.xml

Update 1:

我正在使用Spring框架3.0.据我了解,我不需要像這樣进行資源匯入:

<import resource="foo-services.xml"/>

這是正確的假設吗?

最新回復
  • 5月前
    1 #

    我發現以下設置最簡單。

    使用DispatcherServlet的預設配置檔案載入機製:

    The framework will, on initialization of a DispatcherServlet, look for a file named [servlet-name]-servlet.xml in the WEB-INF directory of your web application and create the beans defined there (overriding the definitions of any beans defined with the same name in the global scope).

    在您的情况下,只需建立一个檔案 intrafest-servlet.xmlWEB-INF dir,不需要在 web.xml中指定任何特定資訊

    intrafest-servlet.xml 您可以使用匯入檔案来組成XML配置的檔案。

    <beans>
      <bean id="bean1" class="..."/>
      <bean id="bean2" class="..."/>
      <import resource="foo-services.xml"/>
      <import resource="foo-persistence.xml"/>
    </beans>
    

    請註意,Spring团队實際上更類似在建立(web)ApplicationContext時載入多个配置檔案.如果您仍然希望以這種方式进行操作,那麼我认為您無需同時指定两个上下文引數( context-paramservlet初始化引數( init-param ).两者之一.您還可以使用逗號指定多个配置位置。

  • 5月前
    2 #

    Mike Nereson在他的博客上說:

    http://blog.codehangover.com/load-multiple-contexts-into-spring/

    There are a couple of ways to do this.

    1. web.xml contextConfigLocation

    您的第一个選擇是將它们全部載入到web應用程式中 通過ContextConfigLocation元素获取上下文.你已经要走了 假設您正在編寫主應用程式上下文 web應用程式.您需要做的就是在两者之間留一些空白 下一个上下文的宣告。

     <context-param>
          <param-name> contextConfigLocation </param-name>
          <param-value>
              applicationContext1.xml
              applicationContext2.xml
          </param-value>
      </context-param>
      <listener>
          <listener-class>
              org.springframework.web.context.ContextLoaderListener
          </listener-class>
      </listener>
    

    以上使用迴車符.或者,您可以將 空間。

     <context-param>
          <param-name> contextConfigLocation </param-name>
          <param-value> applicationContext1.xml applicationContext2.xml </param-value>
      </context-param>
      <listener>
          <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class>
      </listener>
    

    2. applicationContext.xml import resource

    您的另一个選擇是仅添加您的主applicationContext.xml 到web.xml,然後在该主要上下文中使用import語句。

    applicationContext.xml 你可能有...

     <!-- hibernate configuration and mappings -->
      <import resource="applicationContext-hibernate.xml"/>
      <!-- ldap -->
      <import resource="applicationContext-ldap.xml"/>
      <!-- aspects -->
      <import resource="applicationContext-aspects.xml"/>
    

    Which strategy should you use?

    1. 我总是類似通過 web.xml載入

    因為,這使我可以將所有上下文保持隔离 其他.通過測試,我们可以仅載入需要執行的上下文 這些測試.這也使開發作為元件也更加模組化 呆 loosely coupled ,以便將来我可以提取軟體包 或垂直層並將其移至其自己的模組。

    2. 如果要將上下文載入到 non-web application中 ,我会用 import 資源。

  • 5月前
    3 #

    我们正在處理两種型別的上下文:

    1 :根上下文(父上下文。通常包括所有jdbc(ORM,Hibernate)初始化和其他与Spring Security相關的配置)

    2 :單独的Servlet上下文(子上下文。通常是分派器Servlet上下文,並初始化与spring-mvc相關的所有bean(控製器,URL對映等)。

    這是web.xml的示例,其中包含多个應用程式上下文檔案

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                                http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
        <display-name>Spring Web Application example</display-name>
        <!-- Configurations for the root application context (parent context) -->
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                /WEB-INF/spring/jdbc/spring-jdbc.xml <!-- JDBC related context -->
                /WEB-INF/spring/security/spring-security-context.xml <!-- Spring Security related context -->
            </param-value>
        </context-param>
        <!-- Configurations for the DispatcherServlet application context (child context) -->
        <servlet>
            <servlet-name>spring-mvc</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>
                    /WEB-INF/spring/mvc/spring-mvc-servlet.xml
                </param-value>
            </init-param>
        </servlet>
        <servlet-mapping>
            <servlet-name>spring-mvc</servlet-name>
            <url-pattern>/admin/*</url-pattern>
        </servlet-mapping>
    </web-app>
    

  • 5月前
    4 #

    @eljenso:如果應用程式使用SPRING wEB MVC,則將使用intrafest-servlet.xml web應用程式上下文xml。

    否則@kosoant配置就可以了。

    如果您不使用SPRING wEB MVC,但想使用SPRING IOC,則為簡單示例:

    在web.xml中:

    <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:application-context.xml</param-value>
    </context-param>
    

    然後,您的application-context.xml將包含: <import resource="foo-services.xml"/> 這些import語句可載入各種應用程式上下文檔案並將其放入主application-context.xml中。

    谢谢,希望對您有所帮助。

  • 5月前
    5 #

    我是模組化弹簧上下文的作者.

    這是一个很小的實用程式庫,与使用基於XML的配置元資料組成相比,它可以使Spring上下文更具模組化的組织方式. modular-spring-contexts 通過定義模組(它们基本上是独立的應用程式上下文)並允许模組从其他模組(从其原始模組匯出)中匯入bean来进行工作。

    關键點是

      control over dependencies between modules

      control over which beans are exported and where they are used

      reduced possibility of naming collisions of beans

    一个簡單的示例如下:

    檔案 moduleDefinitions.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:module="http://www.gitlab.com/SpaceTrucker/modular-spring-contexts"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                            http://www.gitlab.com/SpaceTrucker/modular-spring-contexts xsd/modular-spring-contexts.xsd
                            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
        <context:annotation-config />
        <module:module id="serverModule">
            <module:config location="/serverModule.xml" />
        </module:module>
        <module:module id="clientModule">
            <module:config location="/clientModule.xml" />
            <module:requires module="serverModule" />
        </module:module>
    </beans>
    

    檔案 serverModule.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:module="http://www.gitlab.com/SpaceTrucker/modular-spring-contexts"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                            http://www.gitlab.com/SpaceTrucker/modular-spring-contexts xsd/modular-spring-contexts.xsd
                            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
        <context:annotation-config />
        <bean id="serverSingleton" class="java.math.BigDecimal" scope="singleton">
            <constructor-arg index="0" value="123.45" />
            <meta key="exported" value="true"/>
        </bean>
    </beans>
    

    檔案 clientModule.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:module="http://www.gitlab.com/SpaceTrucker/modular-spring-contexts"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                            http://www.gitlab.com/SpaceTrucker/modular-spring-contexts xsd/modular-spring-contexts.xsd
                            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
        <context:annotation-config />
        <module:import id="importedSingleton" sourceModule="serverModule" sourceBean="serverSingleton" />
    </beans>
    

  • angularjs:更改服務資料時更新範圍值
  • iphone:如何在iOS中的小鍵盤上添加"完成"按钮