Spring Аннотации MVC с контекстом глобального контекста: компонент-сканирование?

У меня есть сервлет диспетчера Spring с именем сервлета "spring-mvc". Spring-mvc-servlet.xml выглядит следующим образом:

<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/annotation-context.xml у меня определен сканер аннотаций. Все мои аннотированные классы загружены, и другие компоненты Spring могут нормально их загружать.

Однако сопоставления путей не работают из spring-mvc. Если я копирую контекстный сканер в spring-mvc-servlet.xml, то они работают.

Возможно ли, чтобы spring-mvc-servlet.xml ссылался на bean-компоненты, определенные на глобальном уровне Spring?


person jsight    schedule 18.11.2009    source источник
comment
нет такой вещи, как глобальный весенний уровень. Что делает этот файл WEB-INF/annotation-context.xml и что к нему относится?   -  person skaffman    schedule 18.11.2009
comment
глобальный уровень весны == контекст приложения (в отличие от вложенного контекста, в котором определен сервлет-диспетчер)   -  person jsight    schedule 23.11.2009


Ответы (1)


Вы можете загружать свои контексты иерархически так что контекст, описанный в annotation-context.xml, становится родителем вашего контекста Spring MVC. После этого последний сможет получить доступ ко всем bean-компонентам, определенным в первом.

документация Spring описывает несколько способов сделай это. Например, в вашем 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>
person ChssPly76    schedule 18.11.2009
comment
Да, именно этим я и занимаюсь. Контроллер в родительском контексте не виден spring mvc в контексте сервлета spring-mvc. Однако их можно вызывать вручную, просто этот диспетчерский сервлет не видит ни их, ни их сопоставления путей. - person jsight; 23.11.2009