직관적인 컴포넌트 스캔에 대해서 알아보자
✔️ 등록할 빈이 수백, 수천개라면🥲...-> 컴포넌트 스캔과 의존관계 자동 주입하는 @Autowired
컴포넌트 스캔은 컴포넌트가 붙은 클래스들을 스프링 빈에 등록한다.
컴포넌트 스캔을 어떻게 이용하는가?
@ComponentScan(
//- 1) basePackages : 경로 포함 하위
//basePackages="hello.core"
//- 2) basePackageClasses : 지정 클래스의 패키지를 시작위치
//basePackageClasses = MemberService.class
//- 3) 없는 경우 이 @ComponentScan이 붙은 설정 정보 클래스의 패키지가 시작 위치
// -4) 권장하는 방법 3의 방법으로 하되, 최상단에 설정정보 클래스를 두기
)
✔️ 필터를 통해서 컴포넌트 스캔 대상 지정 및 제외 대상 지정
내가 직접 annotation을 만든다.
@포함, @제외라는 annotation을 만들고 각각 추가할, 제외할 클래스에 선언하고
설정정보 클래스에서 아래와 같이 나타내자
@ComponentScan(
includeFilters=@Filter(type=FilterType.ANNOTATION, classes = 포함.class),
excludeFilters=@Filter(type=FilterType.ANNOTATION, classes = 제외.class)
// 1. FilterType.ANNOTATION : 클래스나 에노테이션 인식
// 2. FilterType.ASSIGNABLE_TYPE : 지정타입과 자식 타입도 같이 인식
// 3. FilterType.ASPECTJ :AspectJ 페턴
// ...REGEX : 정규식..
)
✔️ 같은 이름의 빈으로 인해서 발생하는 충돌