1.10.3 자동으로 클래스 검색 및 Bean 정의 등록
Spring은 스테레오 타입 클래스를 자동으로 감지하여 해당 BeanDefinition
인스턴스를 ApplicationContext
에 등록 할 수 있다. 예를 들어, 다음 두 클래스는 자동 감지에 해당합니다.
이러한 클래스를 자동 검색하고 해당 빈을 등록하려면 @Configuration
클래스에 @ComponentScan
속성을 추가 해야합니다 . 여기서 basePackages
속성은 두 클래스의 공통 상위 패키지입니다. (또는 각 클래스의 상위 패키지를 포함하는 쉼표 또는 세미콜론 또는 공백으로 구분 된 목록을 지정할 수 있습니다.)
간단히하기 위해, 앞의 예제는 annotation의 |
다음 대안은 XML을 사용합니다.
|
<context:annotation-config>
: XML에서 정의 되었든 컴포넌트 스캔을 통해 정의되었는지에 관계없이 빈에서 많은 다른 주석을 활성화합니다.
<context:component-scan>
:
XML을 사용하지 않고 bean을 정의하기위한 것입니다.
<context:annotation-config>
: spring 설정 XML에서 이미 등록 된 빈에 대한 주석을 검색하고 활성화합니다.
<context:component-scan>
: 빈 등록 + <context:annotation-config>
@Autowired와 @Required 는 대상 속성 레벨 이므로 bean은 Spring IOC에서 이러한 주석을 사용하기 전에 등록해야합니다. 이 주석을 활성화하려면 각 bean을 등록하거나 <context:annotation-config />
포함시켜야합니다. 즉, <context:annotation-config />
는 등록 된 bean에서만 작동합니다.
@Required 는 RequiredAnnotationBeanPostProcessor
처리 도구를 활성화합니다.
@Autowired 는 AutowiredAnnotationBeanPostProcessor
처리 도구를 활성화합니다.
참고 : 주석 자체는 아무 것도 아니며 핵심 프로세스를 담당하는 클래스 인 처리 도구 가 필요합니다.
@Repository, @Service 및 @Controller는 @Component 이며 클래스 수준 을 대상으로합니다 .
<context:component-scan>
은 패키지를 검색하고 빈을 찾아 등록하며 <context:annotation-config />
의해 수행 된 작업을 포함합니다.
클래스 경로 패키지를 검색하려면 클래스 경로에 해당 디렉토리 항목이 있어야합니다. Ant로 JAR을 빌드 할 때, JAR 태스크의 파일 전용 스위치를 활성화하지 않았는지 확인하십시오. 또한 클래스 경로 디렉토리는 일부 환경의 보안 정책에 따라 노출되지 않을 수 있습니다 (예 : JDK 1.7.0_45 이상 버전의 독립 실행 형 응용 프로그램) (매니페스트에 '신뢰할 수있는 라이브러리'설정 필요 - http://stackoverflow.com/ 참조) . 질문 / 19394570 / java-jre-7u45-breaks-classloader-getresources ). JDK 9의 모듈 경로 (Jigsaw)에서 Spring의 classpath 스캐닝은 일반적으로 예상대로 작동한다. 그러나 구성 요소 클래스가 |
또한 AutowiredAnnotationBeanPostProcessor
and CommonAnnotationBeanPostProcessor
는 component-scan 요소를 사용할 때 암시 적으로 포함됩니다. 즉, 두 구성 요소가 자동으로 감지되고 함께 연결됩니다. XML의 모든 빈 구성 메타 데이터가 제공되지 않습니다.
당신의 |
<context:annotation-config />
태그를 사용하면 내부적으로 다음의 클래스를 빈 객체로 등록한다.
AutowiredAnnotationBeanPostProcessor : @Autowired에 대한 의존 주입 처리를 한다.
RequiredAnnotationBeanPostProcessor : @Required에 대한 의존 주입 처리를 한다.
ConfigurationClassPostProcessor : @Configuration에 대한 설정 처리를 한다.
CommonAnnotationBeanPostProcessor : JSR-250(@PostConstruct 등)에 대한 라이프사이클 처리를 한다.
Last updated