본문 바로가기
Spring Study/Spring 기본

[Spring 기본] 컴포넌트 스캔 (Component Scan)

by 정재인 2023. 8. 4.
컴포넌트 스캔 (Component Scan)
- 스프링에서는 설정 정보(AppConfig.class) 없이 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 기능      제공
- 스프링 빈을 등록할 때는 의존관계를 자바 코드로 직접 등록하는 방법 / 컴포넌트 스캔과 자동 의존관계    설정하는 @Autowired를 사용하는 방법이 있음
- @ComponentScan은 탐색 위치에 @Component가 붙은 모든 클래스를 스프링 빈으로 등록
- @Configuration, @Service, @Repository, @Controller,  등의 어노테이션에도 전부                      @Component이 포함되어 있어 자동으로 컴포넌트 스캔의 대상   
- @Autowired: 의존관계 자동 주입

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

- @ComponentScan은 @Component각 붙은 모든 클래스를 스프링 빈으로 등록

- 이때 스프링 빈의 기본 이름은 클래스명을 사용하되 맨 앞글자만 소문자로 등록

- 스프링 빈 이름을 직접 지정하고 싶으면 @Component("....") 사용 

 

- 생성자에 @Autowired를 지정하면, 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아 주입

- 기본 조회 전략은 타입이 같은 빈을 찾아 주입

 

- 생성자에 파라미터가 많아도 모두 자동 주입

 

컴포넌트 스캔 기본 대상

- @Component: 컴포넌트 스캔에서 사용
- @Controller: 스프링 MVC 컨트롤러에서 사용 / 스프링 MVC 컨트롤러로 인식
- @Service: 스프링 비즈니스 로직에서 사용 / 특별한 기능 보다는 개발자들이 핵심 비즈니스 로직의 위치 확인할 때 사용
- @Repository: 스프링 데이터 접근 계층에서 사용 / 스프링 데이터 접근 계층으로 인식, 데이터 계층 예외를 스프링 예외로 변환
- @Configuration: 스프링 설정 정보에서 사용 / 스프링 설정 정보 인식, 스프링 빈이 싱글톤을 유지하도록 추가 처리

 

필터 

- includeFIlters: 컴포넌트 스캔 대상을 추가로 지정 (@Component면 충분하기 때문에 거의 사용 X)
- excludeFilters: 컴포넌트 스캔에서 제외할 대상 지정

 

중복 등록과 충돌

- 자동 빈 등록 vs 자동 빈 등록: 이름이 같은 경우 스프링 오류 발생
- 수동 빈 등록 vs 자동 빈 등록: 수동 빈 등록 우선 (수동 빈이 자동 빈을 오버라이딩)

 

댓글