설정 정보가 없어도 자동으로 스프링 빈 등록
의존 관계 자동 주입
//AutoAppConfig 클래스
@Configuration
/*
@Configuration
자바 클래스를 통해 빈 정의 (@Bean이 적용된 인터페이스를 빈으로 생성하고 관리)
@Bean이 붙은 클래스가 없는 경우
스프링 애플리케이션의 설정 정보 제공
*/
@ComponentScan(
excludeFilters = @Filter(type = FilterType.ANNOTATION,
classes = Configuration.class))
public class AutoAppConfig {
/*
@Bean으로 등록한 클래스가 하나도 없다
*/
}
/*
@ComponentScan
스캔된 컴포넌트를 찾아 빈으로 등록
excludeFilters (@ComponentScan의 속성 값)
스캔 대상에서 제외할 빈을 필터링하기 위한 속성 값
@Filter
빈 필터를 정의하는 어노테이션
type (@Filter의 속성 값)
필터의 유형을 지정한다.
type = FilterType.Annotation
어떤 어노테이션이 붙은 클래스를 대상으로 필터링한다.
classes (@Filter의 속성 값)
classes = Configuration.class
@Configuration이 붙은 클래스를 제외할 대상으로 지정
*/
@Configuration이 붙은 클래스를 제외하는 이유
중복 방지
@ComponentScan으로 패키지를 스캔하면서 동시에 @Configuration 클래스를 스캔하게 되면 같은 빈이 중복으로 등록될 수 있다.
⇒ @Configuration은 @Component을 포함하고 있다. (자동 스캔의 대상)
각 클래스가 컴포넌트 스캔의 대상이 되어야 한다.