-
김영한님의 스프링 핵심 원리 - 기본편 강의를 듣고 작성했습니다.
컴포넌트 스캔과 의존관계 자동 주입
@ComponentScan
- @Component가 포함된 클래스들을 자동으로 스프링 컨테이너에 넣어준다.
- 이때 스프링 빈의 기본 이름은 클래스명을 사용하되 맨 앞글자만 소문자를 사용한다.
- 이름을 지정하고 싶으면 @Component("Service2")와 같은 방식으로 이름을 지정해주면 된다.
- 사용할 경우 일일히 설정 정보를 @Configuration으로 지정한 설정 정보 파일에 넣어줄 필요가 없어서 반복을 피할 수 있다.
@Autowired
생성자나 필드, 메소드에서 스프링 컨테이너가 의존관계를 자동으로 주입해주는 기능을 제공한다.
기본 조회 전략은 타입이 같은 빈을 찾아서 주입한다.
컴포넌트 스캔 탐색 위치
어떠한 설정도 하지 않으면 기본적으로 @ComponentScan이 붙은 설정 정보 클래스의 패키지가 시작 위치가 된다.
위치를 지정하고 싶다면 다음과 같이 지정할 수 있다.
@ComponentScan( basePackages = "com.example.packagename" )
*권장하는 방법: 패키지 위치를 따로 지정하지 않고 설정 정보 클래스의 위치를 프로젝트 최상단에 두는 것이 좋다.
컴포넌트 스캔 기본 대상
- @Component
- @Controller
- @Service
- @Repository
- @Configuration
@Controller등의 소스코드를 보면 @Component를 포함하고 있는 것을 볼 수 있다.
또한 각각의 애노테이션은 다음의 부가 기능을 수행한다
- @Controller : 스프링 MVC 컨트롤러로 인식
- @Repositorty: 스프링 데이터 접근 계층으로 인식, 데이터 계층의 예외를 스프링 예외로 변환시킨다.
- @Configuration: 스프링 설정 정보로 인식, 스프링 빈이 싱글톤을 유지하도록 추가 처리
- @Service: 특별한 처리를 하지 않으나, @Service를 붙임으로써 개발자에게 핵심 비즈니스 로직의 위치를 알 수 있게 해줌
필터
- includeFilters : 컴포넌트 스캔 대상 추가 지정
- excludeFilters : 컴포넌트 스캔 대상 제외
사용하기 위해선 애노테이션을 정의해야한다
* 애노테이션의 설정 정보는 @Component의 애노테이션을 가져왔다
애노테이션을 정의한 다음에 해당 필터를 원하는 클래스에 애노테이션을 지정해준다.
그 뒤, ComponentScan에 값을 지정해주면 된다.
@ComponentScan( includeFilters = @Filter(type = FilterType.ANNOTATION, classes = [IncludeComponentTestAnnotation.class] excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = [ExcludeComponentTestAnnotation.class] )
FilterType 옵션
- ANNOTATION: 기본 값, 애노테이션을 인식해서 동작한다
- ASSIGNABLE_TYTPE: 지정한 타입과 자식 타입을 인식해서 동작한다.
- ASPECTJ: ASPECTJ 패턴 사용
- REGEX: 정규 표현식
- CUSTOM: TypeFilter라는 인터페이스를 구현해서 처리
'스프링' 카테고리의 다른 글
빈 생명주기 콜백 (0) 2021.09.09 의존관계 자동 주입 (0) 2021.09.06 싱글톤 패턴과 싱글톤 컨테이너 (0) 2021.08.28 스프링 빈과 스프링 컨테이너 (0) 2021.08.02 객체 지향 원리 적용 (0) 2021.07.29