컴포넌트 스캔과 의존관계 자동 주입
컴포넌트 스캔
설정 정보 없이 자동으로 스프링 빈을 등록 해주는 기능
설정 파일에 @ComponentScan 사용
excludeFilters를 사용하여 특정 클래스를 제외 가능
@Component 어노테이션이 붙은 클래스를 스캔하여 스프링 빈으로 등록
=> ("빈 이름")으로 수동적으로 빈 이름 지정 가능
의존 관계를 위해서 @Autowired를 이용해 자동 의존 주입을 이용해야 함
@Autowired
의존 관계주입을 자동으로 주입 해주는 기능
타입이 같은 빈을 찾아 주입
탐색 위치와 기본 스캔 대상
탐색 위치
@ComponentScan의 옵션으로 basePackages를 이용해 시작 위치를 지정할 수 있음
basePackagesClasses를 통해 클래스 지정 후 해당 클래스 위치를 시작 위치로 지정할 수 있음
디폴트는 @ComponentScan을 지정한 설정 정보 클래스의 패키지가 시작 위치가 됨
=> 권장 하는 방법(설정 파일을 최상단에 둠)
기본 스캔 대상
@Component
@Controller : 스프링 MVC 컨트롤러로 인식
@Service : 비즈니스 계층을 인식하는데 도움
@Repository : 스프링 데이터 접근 계층으로 인식하고 데이터 계층의 예외를 스프링 예외로 변환
@Configuration : 스프링 설정 정보로 인식하고 스프링 빈이 싱글톤을 유지하도록 추가 처리 해 줌
필터
@ComponentScan의 옵션
includeFilters : 컴포넌트 스캔 대상을 추가로 지정
excludeFilters : 컴포넌트 스캔에서 제외할 대상을 지정
FilterType 옵션
ANNOTATION : 디폴트, 애노테이션 인식
ASSIGNABLE_TYPE : 지정한 타입과 자식 타입 인식
ASPECTJ : AspectJ 패턴 사용
REGEX : 정규 표현식
CUSTOM : TypeFilter 인터페이스를 구현해서 처리
중복 등록과 충돌
- 자동 빈 등록 vs 자동 빈 등록
Exception 발생
- 수동 빈 등록 vs 자동 빈 등록
수동 빈 등록이 우선권을 가짐(오버라이딩)
=> 최근 스프링 부트에서는 오류 발생
'BackEnd 학습 > Spring Framework' 카테고리의 다른 글
| Spring(스프링) - 빈 생명주기 콜백 (0) | 2023.03.30 |
|---|---|
| Spring(스프링) - 의존관계 자동 주입 (0) | 2023.03.26 |
| Spirng(스프링) - 싱글톤 컨테이너 (0) | 2023.01.31 |
| Spring(스프링) - 스프링 컨테이너와 스프링 빈 (0) | 2022.11.20 |
| Spring(스프링) - 객체지향 적용 및 스프링 기본 (0) | 2022.11.13 |