컴포넌트 스캔

inho ha·2022년 4월 17일
0

스프링 핵심 원리

목록 보기
4/7

컴포넌트 스캔과 의존관계 자동 주입

컴포넌트 스캔 : @Component 가 붙은 클래스를 찾아서 자동으로 스프링 빈에 등록해줌
(안에 excludeFilters 로 제외 목록 설정 가능)
basePackages 로 탐색 시작 디렉토리 설정가능
설정 안해주면 라이브러리랑 싹다 탐색해버릴 수도 있음
디폴트는 해당 디렉토리로 설정됨
config 파일을 프로젝트 시작 루트 위치에 두면 됨

스프링 부트로 프로젝트를 생성하면 @SpringBootApplication 속에 ComponentScan이 포함되어 있음

@Autowired : 클래스의 생성자에 붙여주면 스프링이 자동으로 의존관계를 주입해줌

컴포넌트 스캔 기본 대상

@Component
@Controller : 스프링 MVC 컨트롤러로 인식
@Service : 스프링에서 따로 추가적인 처리는 없고 개발자들이 핵심 비지니스 로직이 여기에 이있다는 것을 알리는 용도
@Repository : 스프링 데이터 접근 계층으로 인식, 데이터 계층의 예외를 스프링 예외로 변환해줌
@Configuration : 스프링 설정 정보로 인식, 스프링 빈이 싱글톤을 유지하도록 추가 처리

컴포넌트 스캔 필터 옵션

ANNOTATION : 기본값, 어노테이션을 인식해서 동작

ASSIGNABLE_TYPE : 지정한 타입과 자식 타입을 인식해서 동작

ASPECTJ : AspectJ 패턴 사용

REGEX : 정규 표현식

CUSTOM : TypeFilter 라는 인터페이스를 구현해서 처리

중복 등록과 충돌

컴포넌트 스캔에서 같은 빈 이름이 등록된 경우

  1. 자동 빈 등록 vs 자동 빈 등록
    스프링에서 예외 발생 시킴

  2. 수동 빈 등록 vs 자동 빈 등록
    수동 빈 등록이 우선권을 가지고
    수동 빈이 자동 빈을 오버라이딩 한다
    최근 스프링 부트에서는 이 경우에도 오류가 발생하도록 기본 값을 바꾸었다
    @SpringBootApplication 으로 실행하면 오류가 발생한다

profile
iha / ian / inho ha

0개의 댓글