복붙노트

[SPRING] 상황에 따른 스캔 구성 요소 필터

SPRING

상황에 따른 스캔 구성 요소 필터

My Spring MVC 기반 웹 애플리케이션은 일반적으로 MVC 디스패처 서블릿 용 웹 애플리케이션 컨텍스트와 부모 / 루트 애플리케이션 컨텍스트라는 두 가지 컨텍스트를 사용합니다.

<!-- the context for the dispatcher servlet -->
<servlet>
    <servlet-name>webApp</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
....
<!-- the context for the root/parent application context -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:root-context.xml</param-value>
</context-param>

이 컨텍스트 내에서 모든 bean로드를 위해 구성 요소 스캐닝을 사용합니다. 내 패키지의 이름은 기술 계층 (예 : com.abc.dao, com.abc.services 등)을 기반으로하는 것이 아니라 사용 사례에 따라 지정됩니다 (예 : com.abc.registration, com.abc.login 등)

이제 내 질문 : 일부 클래스의 중복 검색을 방지하기 위해 두 컨텍스트의 후보 구성 요소 클래스를 필터링하는 것이 좋습니다. 웹 컨텍스트 스캔을위한 MVC 컨트롤러 만 포함하고 다른 모든 구성 요소 (서비스, DAO / 리포지토리)를 루트 응용 프로그램 컨텍스트에 포함 시키십시오.

<!-- servlet-context.xml -->
<context:component-scan base-package="com.abc.myapp" use-default-filters="false">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

<!-- root-context.xml -->
<context:component-scan base-package="de.efinia.webapp">
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

또는 구성 요소 스캔을 위해 이러한 중복을 피하는 것이 중요하지도 않으며 필요하지도 않습니까?

해결법

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

    1.나는 두 가지 영역에서 당신의 솔루션을 좋아합니다 :

    나는 두 가지 영역에서 당신의 솔루션을 좋아합니다 :

    그러나 중복 Bean (제어기 W 서비스 bean 모두)을 사용하면 미묘한 버그와 불일치가 발생할 수 있습니다. 일부 연결 풀이 두 번 초기화되었습니다. 일부 시작 후크가 두 번 실행되어 예기치 않은 동작이 발생합니다. 싱글 톤 스코프를 사용한다면, 그것을 유지하십시오. 아마 당신은 몇 가지 문제를 즉시 치지 않을 것이지만, 계약에 복종하는 것이 좋다.

    BTW에는 태그도 있습니다.

  2. ==============================

    2.참으로 좋은 습관입니다. 상위 응용 프로그램 컨텍스트에는 컨트롤러가 없어야합니다.

    참으로 좋은 습관입니다. 상위 응용 프로그램 컨텍스트에는 컨트롤러가 없어야합니다.

    연습을 정당화하기 위해 더 많은 논점을 추가 할 수는 없지만 확실히 그런 식으로 깨끗합니다.

  3. from https://stackoverflow.com/questions/7609846/context-depended-scan-component-filter by cc-by-sa and MIT license