복붙노트

[SPRING] ComponentScan.basePackages 대 ComponentScan.basePackageClasses는 하나의 봄 webMVC 컨트롤러를 등록?

SPRING

ComponentScan.basePackages 대 ComponentScan.basePackageClasses는 하나의 봄 webMVC 컨트롤러를 등록?

나는 나의 봄의 WebApplicationContext에 하나의 특정 컨트롤러 클래스를 추가 할. (그 스칼라에서, 그러나 여기에서 적응 : 하나의 클래스와 구성 요소를 스캔 : ComponentScan 또는 컨텍스트를 사용하여) 나는 다음과 같은 예를 가로 질러

@Configuration 
@ComponentScan(
  basePackages = Array("com.example.controllers"),
  useDefaultFilters = false,
  includeFilters = Array(
    new ComponentScan.Filter(`type` = FilterType.ASSIGNABLE_TYPE,
      value = Array(classOf[com.example.controllers.MyController]))))
class MyConfig {
}

이것은 잘 작동 (하지만 매우 장황). 그러나 봄의 @ComponentScan도 basePackageClasses있다

@Configuration 
@ComponentScan( basePackageClasses=Array(classOf[com.example.controllers.MyController])) 
class MyConfig {
}

basePackageClasses의, 봄의 문서는 말합니다 :

Type-safe alternative to basePackages() for specifying the packages to
scan for annotated components.

첫 번째 ComponentScan에만 제대로 com.example.controllers.MyController,하지만 두 번째 원인 내 @Controller을 모두 추가하는 동안 그러나, 스캔 및 추가 할 수 있습니다! 왜? basePackageClasses의 사용은 무엇입니까?

예 같은 : https://github.com/mikaelhg/springmvc-example/blob/master/src/main/java/mikaelhg/example/ExampleConfiguration.java basePackageClasses는 하나의 구성 요소를로드하는 데 사용할 수 있습니다 것이 좋습니다.

최신 정보:

여담 대체로서 :

@Configuration 
@ComponentScan(
  basePackages = Array("com.example.controllers"),
  useDefaultFilters = false,
  includeFilters = Array(
    new ComponentScan.Filter(`type` = FilterType.ASSIGNABLE_TYPE,
      value = Array(classOf[com.example.controllers.MyController]))))
class MyConfig {
}

@Configuration 
class MyConfig {

  @Bean
  var myController = new com.example.controllers.MyController

}

WebApplicationContext를 추가 할 때 - MyController에가 (동작 (404) - NOTFOUND로 변경) 서블릿에 연결되어 있지 도착 도착 않을 것으로 보인다.

해결법

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

    1.그 속성의 전체의 javadoc 읽기

    그 속성의 전체의 javadoc 읽기

    형태 보증하여 패키지의 이름의 문자열 값이 실수를 할 수 없습니다. 잘못된 클래스를 지정하면 컴파일 타임에 실패합니다.

    당신이 basePackageClasses를 지정하면, 봄은 사용자가 지정한 클래스의 패키지 (및 서브 패키지)를 검색합니다. 이 클래스 / 등 컨트롤러, 서비스와 같은 인터페이스는 컨트롤러 클래스를 포함하는 하나 개의 패키지에 모든 컨트롤러를 넣고 basePackageClasses에 컨트롤러 클래스를 지정 무 조작으로 멋진 트릭입니다. 봄은 그들 모두를 선택합니다.

    당신은 여전히 ​​필터를 지정해야합니다.

  2. from https://stackoverflow.com/questions/24130166/componentscan-basepackageclasses-vs-componentscan-basepackages-to-register-a-sin by cc-by-sa and MIT license