Spring/스프링 핵심 원리 - 기본편

[컴포넌트 스캔] 기본 스캔 대상

alsruds 2023. 12. 7. 02:22
🧐강의🧐
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard

 

탐색할 패키지의 시작 위치 지정하기

· AutoAppConfig

...
@Configuration
@ComponentScan(
        // 탐색할 패키지 시작 위치 지정하기
        basePackages = "hello.core.member",
        // 지정한 클래스의 패키지를 탐색 시작 위치로 지정하기
        basePackageClasses = AutoAppConfig.class,
        ...
)
public class AutoAppConfig { }

 

basePackages : 탐색할 패키지의 시작 위치 지정, 모든 하위 패키지 탐색

basePackageClasses : 미지정 시, @ComponentScan 이 붙은 설정 정보 클래스의 패키지가 시작 위치

 

☑️ 권장하는 방법
1. 패키지 위치 지정 X
2. 프로젝트 최상단에 설정 정보 클래스 두기
- 스프링 부트가 기본으로 제공하는 방법

 

컴포넌트 스캔 기본 대상

  • @Component : 컴포넌트 스캔에서 사용
  • @Controller : 스프링 MVC 컨트롤러에서 사용
  • @Service : 스프링 비즈니스 로직에서 사용 (비즈니스 계층 인식)
  • @Repository : 스프링 데이터 접근 계층에서 사용 (데이터 계층의 예외를 스프링 예외로 변환)
  • @Configuration : 스프링 설정 정보에서 사용 (스프링 빈이 싱글톤을 유지하도록 추가 처리)

 

참고
- 애노테이션에는 상속 관계가 없음 : 특정 애노테이션 인식 → 스프링 기능
- useDefaultFilters 옵션 : 기본으로 활성화되어 있으며, 중지 시 기본 스캔 대상들이 제외됨
- 컴포넌트 스캔에서 같은 빈 이름 등록 시
          → 자동 빈 vs. 자동 빈 : ConflictingBeanDefinitionException 예외 발생
          → 자동 빈 vs. 수동 빈 : 수동 빈이 자동 빈 오버라이딩 (최근에는 오류 발생)