자동으로 클래스 검색 및 Bean 정의 등록
Spring은 스테레오 타입 클래스를 자동으로 감지하고
해당 BeanDefinition을 ApplicationContext에 등록 할 수 있습니다.
예를 들어, 다음 두 클래스는 자동 감지에 적합합니다.
@Service
public class SimpleMovieLister {
private MovieFinder movieFinder;
@Autowired
public SimpleMovieLister(MovieFinder movieFinder) {
this.movieFinder = movieFinder;
}
}
@Repository
public class JpaMovieFinder implements MovieFinder {
// 명확성을 위해 구현이 생략되었다.
}
이러한 클래스를 자동 검색하고 해당 빈을 등록하려면
@Configuration
클래스에 @ComponentScan
을 추가해야합니다.
여기서 basePackages 속성은 두 클래스의 공통 상위 패키지입니다.
(또는 각 클래스의 상위 패키지를 포함하는 쉼표 / 세미콜론 / 공백으로 구분 된 목록을 지정할 수 있습니다.)
@Configuration
@ComponentScan(basePackages = "org.example")
public class AppConfig {
...
}
간결성을 위해 위의 코드는 어노테이션의 value 속성 즉
@ComponentScan
( “org.example”)을 사용했을 것입니다.
다음은 XML을 사용하는 대안입니다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="org.example"/>
</beans>
<context : component-scan>
을 사용하면
<context : annotation-config>
기능이 암시 적으로 활성화됩니다.
<context : component-scan>
을 사용할 때는
일반적으로 <context : annotation-config>
요소를 포함시킬 필요가 없습니다.
classpath packages 를 검색하려면 classpath에 해당 디렉토리 항목이 있어야 합니다.
Ant로 JAR을 빌드 할 때, JAR 태스크의 파일 전용 스위치를 활성화하지 않았는지 확인하십시오.
또한 classpath 디렉토리는 일부 환경에서 보안 정책에 따라 노출되지 않을 수도 있습니다.
예: JDK 1.7.0_45 이상 버전의 독립 실행 형 앱 (매니페스트에 ‘신뢰할 수있는 라이브러리’설정 필요,
스택오버플로우 참조).
JDK 9의 모듈 경로 (Jigsaw)에서 Spring의 classpath 스캐닝은 일반적으로 예상대로 작동한다.
그러나 컴포넌트 클래스가 모듈 정보 디스크립터로 내보내 졌는지 확인하십시오.
Spring이 비공개(non-public) 클래스 멤버를 호출 할 것으로 기대하는 경우
클래스가 공개되어 있는지 확인하십시오.
(예 : 모듈 정보 설명자(module-info descriptor)의
내보내기(exports) 선언(declaration) 대신 열기(opens) 선언(declaration) 사용)
또한, component-scan
요소를 사용할 때
AutowiredAnnotationBeanPostProcessor
와 CommonAnnotationBeanPostProcessor
는 모두 암시 적으로 포함됩니다.
즉, 두 구성 요소가 자동으로 감지되고 함께 연결됩니다.
XML의 bean 구성 메타 데이터는 제공되지 않습니다.
autowiredAnnotationBeanPostProcessor
및 CommonAnnotationBeanPostProcessor
의 등록을 비활성화 하려면
값이 false 인 annotation-config
속성을 포함시킵니다.