[SPRING] @ComponentScan 주석을 사용하여 여러 경로를 검색하는 방법은 무엇입니까?
SPRING@ComponentScan 주석을 사용하여 여러 경로를 검색하는 방법은 무엇입니까?
저는 Spring 3.1을 사용하고 @Configuration과 @ComponentScan 속성을 사용하여 응용 프로그램을 부트 스트랩합니다.
실제 시작은
new AnnotationConfigApplicationContext(MyRootConfigurationClass.class);
이 Configuration 클래스에는,
@Configuration
@ComponentScan("com.my.package")
public class MyRootConfigurationClass
그리고이 잘 작동합니다. 그러나 나는 내가 스캔 한 패키지에 대해보다 구체적으로 설명하고자한다.
@Configuration
@ComponentScan("com.my.package.first,com.my.package.second")
public class MyRootConfigurationClass
그러나 @Component 주석을 사용하여 지정된 구성 요소를 찾을 수 없다는 오류로 인해 실패합니다.
내가 한 일을하는 올바른 방법은 무엇입니까?
감사
해결법
-
==============================
1.@ComponentScan은 다음과 같이 문자열 배열을 사용합니다.
@ComponentScan은 다음과 같이 문자열 배열을 사용합니다.
@ComponentScan({"com.my.package.first","com.my.package.second"})
하나의 문자열에만 여러 개의 패키지 이름을 제공하면, Spring은이를 하나의 패키지 이름으로 해석하여 찾을 수 없다.
-
==============================
2.기본 패키지 위치를 String으로 지정하는 또 다른 유형 안전 대체 방법이 있습니다. 여기 API를 참조하십시오.
기본 패키지 위치를 String으로 지정하는 또 다른 유형 안전 대체 방법이 있습니다. 여기 API를 참조하십시오.
@ComponentScan(basePackageClasses = {ExampleController.class, ExampleModel.class, ExmapleView.class})
클래스 참조와 함께 basePackageClasses 지정자를 사용하면 (앞서 언급 한 대안과 마찬가지로) 해당 패키지를 스캔하도록 알려줄 것이지만,이 메소드는 유형 안전성이며 향후 리팩터링을위한 IDE 지원을 추가한다.
API를 읽으면서 Spring은 스캔 할 각 패키지에 no-op 표시 자 클래스 또는 인터페이스를 만들 것을 제안합니다.이 인터페이스는이 속성에 대한 /로 참조로 사용되는 것 외에 다른 용도로 사용되지 않습니다.
IMO, 나는 마커 클래스를 좋아하지 않지만 (다시 말하지만 패키지 정보 클래스와 거의 같다) 유형 안전, IDE 지원,이 스캔에 포함해야하는 기본 패키지의 수를 크게 줄인다. 의심의 여지없이 더 나은 선택입니다.
-
==============================
3.패키지 이름을 별도로 제공하십시오. 패키지 이름에는 String []이 필요합니다.
패키지 이름을 별도로 제공하십시오. 패키지 이름에는 String []이 필요합니다.
대신 이것 :
@ComponentScan("com.my.package.first,com.my.package.second")
이것을 사용하십시오 :
@ComponentScan({"com.my.package.first","com.my.package.second"})
-
==============================
4.이 작업을 수행하는 또 다른 방법은 basePackages 필드를 사용하는 것입니다. ComponentScan 주석 내부의 필드입니다.
이 작업을 수행하는 또 다른 방법은 basePackages 필드를 사용하는 것입니다. ComponentScan 주석 내부의 필드입니다.
@ComponentScan(basePackages={"com.firstpackage","com.secondpackage"})
jar 파일의 ComponentScan 주석 .class를 살펴보면 String 배열을 취하는 basePackages 필드가 표시됩니다.
public @interface ComponentScan { String[] basePackages() default {}; }
-
==============================
5.ComponentScan을 사용하여 여러 패키지를 스캔합니다.
ComponentScan을 사용하여 여러 패키지를 스캔합니다.
@ComponentScan ({ "com.my.package.first", "com.my.package.second"})
from https://stackoverflow.com/questions/10794587/how-to-scan-multiple-paths-using-the-componentscan-annotation by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 봄과 빈혈 도메인 모델 (0) | 2018.12.28 |
---|---|
[SPRING] Spring MVC를 사용하여 애플리케이션 시작시 Java 클래스 실행 [duplicate] (0) | 2018.12.28 |
[SPRING] Spring, Hibernate 및 C3P0을 사용하여 다중 사용자 웹 응용 프로그램의 연결 풀 관리 (0) | 2018.12.28 |
[SPRING] @Bean과 @Autowired의 차이점 (0) | 2018.12.28 |
[SPRING] Spring MVC는 어떻게 여러 사용자를 다루는가? (0) | 2018.12.28 |