이 글은 김영한 님의 스프링 핵심 원리 - 기본편을 수강하며 정리한 글입니다.
컴포넌트 스캔
@ComponentScan
설정 정보가 없어도 @Component가 붙은 모든 클래스를 자동으로 스프링 빈으로 등록한다.
@Configuration
@ComponentScan
public class AutoAppConfig {
// 의존관계는 @Autowired를 사용하여 주입한다
// 구현체인 MemoryMemberRepository, RateDiscountPolicy, ... 클래스에 @Component를 붙인다
}
🌳 필터
- includeFilters: 컴포넌트 스캔 대상을 추가로 지정
- excludeFilters: 컴포넌트 스캔에서 제외할 대상을 지정
더보기
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyIncludeComponent {
}
MyIncludeComponent 애너테이션이 붙은 클래스는 포함하고, MyExcludeComponent 애너테이션이 붙은 클래스는 제외하도록 한다.
@Configuration
@ComponentScan(
includeFilters = @Filter(type = FilterType.ANNOTATION, classes = MyIncludeComponent.class),
excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = MyExcludeComponent.class)
)
static class ComponentFilterAppConfig {
}
의존관계 자동 주입
@Autowired
@ComponentScan을 사용하면 의존관계 주입을 명시해 줄 방법이 없기 때문에 @Autowired와 짝꿍이다.
의존관계 주입이 필요한 곳의 생성자에 @Autowired를 지정하면, 스프링 컨테이너가 스프링 빈 저장소에서 타입(인터페이스)에 맞는 해당 스프링 빈(구현체)을 찾아서 자동으로 주입한다.
@Component
public class MemberServiceImpl implements MemberService {
private final MemberRepository memberRepository;
@Autowired
public MemberServiceImpl(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
}
더보기
🌳 탐색할 패키지의 시작 위치 지정
@ComponentScan(
basePackages = "hello.core"
}
- basePackages: 시작 위치, 이 패키지를 포함해서 하위 패키지를 모두 탐색한다.
- basePackageClasses: 지정한 클래스를 포함한 패키지를 탐색 시작 위치로 지정한다.
- 지정하지 않으면 @ComponentScan이 붙은 설정 정보 클래스의 패키지가 시작 위치가 된다.
스프링 부트의 대표 시작 정보인 @SpringBootApplication 안에 @ComponentScan이 들어있다. 스프링 부트를 사용하면 컴포넌트 스캔을 해 주기 때문에 @ComponentScan을 사용할 필요가 없다.
🌳 컴포넌트 스캔 기본 대상
애노테이션 | 컴포넌트 스캔 용도 | 부가 기능 |
@Component | 컴포넌트 스캔에서 사용 | |
@Controlller | 스프링 MVC 컨트롤러에서 사용 | 스프링 MVC 컨트롤러로 인식 |
@Service | 스프링 비즈니스 로직에서 사용 | 특별한 처리 X 개발자들이 '핵심 비즈니스 로직이 여기에 있겠구나' 비즈니스 계층을 인식하는 데 도움 |
@Repository | 스프링 데이터 접근 계층에서 사용 | 스프링 데이터 접근 계층으로 인식하고, 데이터 계층의 예외를 스프링 예외로 변환 |
@Configuration | 스프링 설정 정보에서 사용 | 스프링 설정 정보로 인식하고, 스프링 빈이 싱글톤을 유지하도록 추가 처리 |
'Back-End > Spring' 카테고리의 다른 글
[Spring] 의존관계 자동 주입 - 조회 빈이 2개 이상일 때: @Autowired 필드 명, @Qualifier, @Primary (0) | 2022.03.21 |
---|---|
[Spring] 의존관계 자동 주입 방법 (0) | 2022.03.20 |
[Spring] 싱글톤 컨테이너 - 웹 애플리케이션과 싱글톤 (0) | 2022.03.17 |
인프런 스프링 강의 (0) | 2022.03.09 |
[Spring] BeanFactory와 ApplicationContext (0) | 2022.03.08 |
댓글