2009-11-18 66 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