복붙노트

[SPRING] 글로벌 컨텍스트 컨텍스트가있는 Spring MVC 주석 : component-scan?

SPRING

글로벌 컨텍스트 컨텍스트가있는 Spring MVC 주석 : component-scan?

서블릿 이름이 "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-mvc에서 작동하지 않습니다. 컨텍스트 스캐너를 spring-mvc-servlet.xml에 복사하면 작동합니다.

spring-mvc-servlet.xml이 글로벌 봄 수준에서 정의 된 bean을 참조 할 수 있습니까?

해결법

  1. ==============================

    1.annotation-context.xml에 설명 된 컨텍스트가 Spring MVC 컨텍스트의 부모가되도록 컨텍스트를 계층 적으로로드 할 수 있습니다. 그러면 후자는 전자에서 정의 된 모든 빈에 액세스 할 수 있습니다.

    annotation-context.xml에 설명 된 컨텍스트가 Spring MVC 컨텍스트의 부모가되도록 컨텍스트를 계층 적으로로드 할 수 있습니다. 그러면 후자는 전자에서 정의 된 모든 빈에 액세스 할 수 있습니다.

    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>
    
  2. from https://stackoverflow.com/questions/1757098/spring-mvc-annotations-with-global-context-contextcomponent-scan by cc-by-sa and MIT license