component scan

Devops·2022년 3월 9일

Spring study

목록 보기
10/19

component scan

설정 정보가 없어도 자동으로 스프링 빈을 등록하는 기능

기능을 사용하기 위해선 @ComponentScan 설정정보에 붙여줘야됨

컴포넌트 스캔은 이름 그대로 @Component 애노테이션이 붙은 클래스를 스캔해서 스프링 빈으로 등록한다

탐색 위치와 기본 스캔 대상

basePackages : 탐색할 패키지의 시작 위치를 지정한다. 이 패키지를 포함해서 하위 패키지를 모두 탐색한다.

basePackages = {"hello.core", "hello.service"} 이렇게 여러 시작 위치를 지정할 수도 있다.

basePackageClasses : 지정한 클래스의 패키지를 탐색 시작 위치로 지정한다.
만약 지정하지 않으면 @ComponentScan 이 붙은 설정 정보 클래스의 패키지가 시작 위치가 된다

권장 방법

인적으로 즐겨 사용하는 방법은 패키지 위치를 지정하지 않고, 설정 정보 클래스의 위치를 프로젝트 최상단에 두는 것이다

ex)
com.hello
com.hello.serivce
com.hello.repository

com.hello 프로젝트 시작 루트, 여기에 AppConfig 같은 메인 설정 정보를 두고,

@ComponentScan 애노테이션을 붙이고, basePackages 지정은 생략한다

필터

includeFilters : 컴포넌트 스캔 대상을 추가로 지정한다.

excludeFilters : 컴포넌트 스캔에서 제외할 대상을 지정한다.

testcode

includeFilters 에 MyIncludeComponent 애노테이션을 추가해서 BeanA가 스프링 빈에 등록된다.

excludeFilters 에 MyExcludeComponent 애노테이션을 추가해서 BeanB는 스프링 빈에 등록되지
않는다.

중복등록 경우

수동 빈 등록 vs 자동 빈 등록 경우

이 경우 수동 빈 등록이 우선권을 가진다.
(수동 빈이 자동 빈을 오버라이딩 해버린다.)

로그

Overriding bean definition for bean 'memoryMemberRepository' with a different definition: replacing

profile
Cloud Engineer , backend developer

0개의 댓글