@ComponentScan 주석을 사용하여 여러 경로를 스캔하려면 어떻게 해야 합니까?
Spring 3.1을 사용하여 어플리케이션을 부트스트랩하고 있습니다.@Configuration
그리고.@ComponentScan
특성.
실제 시작은 다음과 같습니다.
new AnnotationConfigApplicationContext(MyRootConfigurationClass.class);
이 구성 클래스에는 다음과 같은 설명이 있습니다.
@Configuration
@ComponentScan("com.my.package")
public class MyRootConfigurationClass
이건 잘 작동합니다.하지만 스캔한 패키지에 대해 좀 더 구체적으로 알고 싶어서 시도해 보았습니다.
@Configuration
@ComponentScan("com.my.package.first,com.my.package.second")
public class MyRootConfigurationClass
단, 이 조작은 실패하고 에러에 의해 지정된 컴포넌트를 찾을 수 없다는 메시지가 표시됩니다.@Component
주석입니다.
제가 추구하는 올바른 방법은 무엇일까요?
감사해요.
@ComponentScan은 다음과 같은 문자열 배열을 사용합니다.
@ComponentScan({"com.my.package.first","com.my.package.second"})
하나의 문자열에만 여러 패키지 이름을 지정하면 Spring은 이를 하나의 패키지 이름으로 해석하므로 찾을 수 없습니다.
베이스 패키지 위치를 String으로 지정하는 대신 타입 세이프가 있는 다른 방법이 있습니다.API를 참조해 주십시오.아래 그림도 참조해 주십시오.
@ComponentScan(basePackageClasses = {ExampleController.class, ExampleModel.class, ExmapleView.class})
클래스 레퍼런스와 함께 basePackageClasses 지정자를 사용하면 Spring에게 (상기된 다른 방법과 마찬가지로) 이러한 패키지를 스캔하도록 지시하지만, 이 방법은 타입 세이프하고 향후 리팩토링에 대한 IDE 지원을 추가합니다.이것은 제 생각에 큰 장점입니다.
API에서 읽어보면 Spring은 스캔을 원하는 각 패키지에 no-op 마커 클래스 또는 인터페이스를 만들 것을 제안합니다.이러한 마커는 이 속성을 참조하기 위한 목적으로만 사용됩니다.
IMO, 저는 마커 클래스를 좋아하지 않지만(그러나 패키지 정보 클래스와 거의 비슷합니다), 타입의 안전성, IDE 지원, 그리고 이 스캔에 필요한 베이스 패키지의 수를 대폭 줄이는 것은 의심의 여지 없이 훨씬 더 좋은 선택입니다.
패키지 이름을 별도로 지정하십시오.패키지 이름에는 가 필요합니다.
이것 대신:
@ComponentScan("com.my.package.first,com.my.package.second")
사용방법:
@ComponentScan({"com.my.package.first","com.my.package.second"})
또 다른 방법으로는,basePackages
필드(ComponentScan 주석 내부의 필드).
@ComponentScan(basePackages={"com.firstpackage","com.secondpackage"})
jar 파일에서 componentScan 주석 .class를 보면 strings 배열을 포함하는 basePackages 필드가 나타납니다.
public @interface ComponentScan {
String[] basePackages() default {};
}
또는 클래스를 명시적으로 언급할 수도 있습니다.여러 개의 클래스가 있고
Class<?>[] basePackageClasses
ComponentScan을 사용하여 여러 패키지를 검색하려면
@ComponentScan({"com.my.package.first","com.my.package.second"})
@ComponentScans 주석을 사용할 수도 있습니다.
@ComponentScans(value = { @ComponentScan("com.my.package.first"),
@ComponentScan("com.my.package.second") })
이 의존관계가 pom.xml에 추가되었는지 확인합니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
사용방법:
@ComponentScan(basePackages = {"com.package1","com.package2","com.package3", "com.packagen"})
언급URL : https://stackoverflow.com/questions/10794587/how-to-scan-multiple-paths-using-the-componentscan-annotation
'itsource' 카테고리의 다른 글
긴 쿼리를 쓰지 않고 모든 GraphQL 유형 필드를 쿼리하려면 어떻게 해야 합니까? (0) | 2022.11.14 |
---|---|
JavaScript: 위치.새 창/탭에서 여는 href를 선택하십시오. (0) | 2022.11.14 |
레퍼런스 요건setuptools setup.py 파일의 install_displays kwarg에 대한 txt (0) | 2022.11.14 |
MySQL에서 날짜/시간에서 시간을 빼는 방법 (0) | 2022.11.14 |
PHP에서 시간대를 지정하여 현재 날짜를 가져오시겠습니까? (0) | 2022.11.14 |