컨포넌트 스캔
24 Dec 2020 | Spring 스터디 컴포넌트 스캔컴포넌트 스캔
스프링은 빈이라는 객체를 컨테이너에 등록해서 관리한다.
스프링이 빈을 등록하는 방법에는 2가지가 있다.
- 설정 파일에 직접 빈으로 등록
- 컴포넌트 스캔
설정 파일에 직접 빈으로 등록하는 방법
@Configuration과 @Bean을 사용한다. 스프링은 @Configuration이 달린 설정 클래스를 보면 @Bean이 붙은 메서드를 찾아 메서드와 동일한 이름의 빈 객체를 생성해준다. @Bean이 달린 메소드 안에는 인스턴스 정보(생성자, 의존 관계)가 들어 있다. 빈 이름은 name 속성으로 지정할 수도 있다.
컴포넌트 스캔
빈으로 등록할 대상을 설정 클래스에 작성하지 않아도 스프링이 직접 클래스를 검색해서 빈으로 등록해주는 기능이다.
스캔 대상은 특정 어노테이션이 붙은 클래스
=> @Component, @Controller, @Service, @Repository, @Aspect, @Configuration
@Component(“print”) 처럼 빈이름을 직접 지정할 수도 있다.
자바 패키지 규모가 커질 수록, 모든 친구들을 일일히 스캐닝해서 올리면 시동 과정이 쓸데없이 느려질수 있다.
필터링을 통해 특정 컴포넌트들만 스캐닝하게 하면 된다.
@ComponentScan의 excludeFilters 속성과 @Filter 애노테이션으로 제외 대상을 지정한다.
@ComponentScan(basePackage = {“spring”, “spring2” },
excludeFilters = @Filter(type = FilterType.ANNOTATION,
classes = {A.class, ManualBean.class}
컴포넌트 스캔에 따른 충돌 처리
스캔 대상의 빈 이름과 수동 등록한 빈 이름이 같은 경우, 수동 등록한 빈이 우선된다. 설정 클래스에서 정의한 빈 한 개만 존재
같은 타입이지만 다른 이름을 사용한다면, 스캔 통해 등록한 빈 1개, 수동 등록한 빈 1개 즉 같은 타입의 빈 2개가 생성된다.
References
초보 웹 개발자를 위한 스프링5 프로그래밍 입문
다시 써보는 스프링 5 레시피