BackEnd Developer, Love Crossfit, Welcome to Jay's blog

컨포넌트 스캔

|

컴포넌트 스캔

스프링은 빈이라는 객체를 컨테이너에 등록해서 관리한다.

스프링이 빈을 등록하는 방법에는 2가지가 있다.

  1. 설정 파일에 직접 빈으로 등록
  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 레시피