2009-11-18 72 views
3

我有一個servlet名稱爲「spring-mvc」的spring調度器servlet。彈簧MVC-servlet.xml中顯示如下:帶有全局上下文上下文的Spring MVC Annotations:component-scan?

<bean id="viewResolver" 
    class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
    <property name="viewClass" 
     value="org.springframework.web.servlet.view.JstlView"/> 
    <property name="prefix" value="/WEB-INF/jsp/"/> 
    <property name="suffix" value=".jsp"/> 
</bean> 

<bean 
    class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/> 

<bean 
    class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/> 

在WEB-INF /註解context.xml的文件I有註釋掃描器限定。我所有的註釋類都被加載了,其他的spring bean都可以加載它們。

但是,路徑映射不適用於spring-mvc。如果我將上下文掃描程序複製到spring-mvc-servlet.xml,那麼它們工作。

spring-mvc-servlet.xml可能引用在全局spring級別定義的bean嗎?

+0

有沒有這樣的事情,「全球春季水平」。這個「WEB-INF/annotation-context.xml」文件做了什麼,它是指什麼? – skaffman 2009-11-18 16:27:03

+0

全局彈簧級別==應用程序上下文(與定義調度程序servlet的嵌套上下文相反) – jsight 2009-11-23 18:43:47

回答

2

您可以load your contexts hierarchically,以便annotation-context.xml中描述的上下文成爲您的Spring MVC上下文的父項。後者將能夠訪問前者中定義的所有bean。

Spring documenation描述了幾種方法來做到這一點。例如,在你的web.xml

// load parent context 
<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/annotation-context.xml</param-value> 
</context-param> 

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

// load Spring MVC context 
<servlet> 
    <servlet-name>spring-mvc</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
+1

是的,這正是我正在做的。在spring-mvc servlet的上下文中,spring mvc沒有看到父上下文中的控制器。但是,可以手動調用它們,只是說dispatcherservlet沒有看到它們或它們的路徑映射。 – jsight 2009-11-23 18:44:40