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

su dong·2023년 6월 13일
0

Bean 등록의 번거로움

@Bean 혹은 XML파일에 으로 빈을 일일이 등록하는 것도 현업에서는 수십, 수백개가 되기 때문에 누락 할 우려가 있음. 반복하는 것도 싫고!

스프링은 설정정보가 없어도 자동으로 스프링빈을 등록하는 @Component 스캔이라는 기능을 제공함.

컴포넌트 스캔 사용법

@ComponentScan을 붙여주면 된다.
그런데 이렇게 하면 이전에 만든 AppConfig와 TestConfig도 @Configuration의 일환으로 bean으로 등록되기 때문에

@ComponentScan(
      excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class)
)

을 사용하여 제외해준다.

@Component 사용법

탐색위치와 기본 스캔 대상

  1. @Composition을 클래스 위에 붙여주면 된다.

    탐색 시작 위치 지정 // 이걸 해주지 않으면 라이브러리까지 다 뒤져서 정말 오래걸린다.
    -> 설정정보 클래스의 위치를 프로젝트 최상단에 두어서, default로 해당 프로젝트 모든 파일을 뒤지도록 하는게 요즘의 관례이다.

    @ComponentScan(
          basePackages = "hello11.core.member",
          excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class)
    )
    
    
  2. 컴포넌트 스캔 기본 대상
    @Component : 컴포넌트 스캔에서 사용
    @Controlller : 스프링 MVC 컨트롤러에서 사용
    @Service : 스프링 비즈니스 로직에서 사용
    @Repository : 스프링 데이터 접근 계층에서 사용
    @Configuration : 스프링 설정 정보에서 사용

    예를 들어서 @Controller의 경우 들어가면 @Component가 붙어있다.

    includeFilter와 excludeFilter를 통해서 뭘 탐색하고 뭘 탐색하지 않을 지 조절할 수 있다.

    @Configuration
      @ComponentScan(
              includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = MyIncludeComponent.class),
              excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = MyExcludeComponent.class)
    )
      static class ComponentFilterAppConfig {
    
      }
profile
사람들을 돕는 문제 해결사, 개발자 sudong입니다. 반갑습니다. tkddlsqkr21@gmail.com

0개의 댓글