ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 컴포넌트 스캔
    스프링 2021. 9. 1. 11:47

    김영한님의 스프링 핵심 원리 - 기본편 강의를 듣고 작성했습니다.

     

    스프링 핵심 원리 - 기본편 - 인프런 | 강의

    스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 개발자가 되어보세요! 📣 확인해주

    www.inflearn.com


     

     

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

     

     

     

    @ComponentScan

    • @Component가 포함된 클래스들을 자동으로 스프링 컨테이너에 넣어준다.
    • 이때 스프링 빈의 기본 이름은 클래스명을 사용하되 맨 앞글자만 소문자를 사용한다.
    • 이름을 지정하고 싶으면 @Component("Service2")와 같은 방식으로 이름을 지정해주면 된다.
    • 사용할 경우 일일히 설정 정보를 @Configuration으로 지정한 설정 정보 파일에 넣어줄 필요가 없어서 반복을 피할 수 있다.

    설정 정보에 @ComponentScan 붙임
    서비스에 @Component를 붙이면 클래스가 스프링 컨테이너에 자동으로 등록된다

     

    @Autowired

    생성자나 필드, 메소드에서 스프링 컨테이너가 의존관계를 자동으로 주입해주는 기능을 제공한다.

    기본 조회 전략은 타입이 같은 빈을 찾아서 주입한다.

     

     

     

    컴포넌트 스캔 탐색 위치

    어떠한 설정도 하지 않으면 기본적으로 @ComponentScan이 붙은 설정 정보 클래스의 패키지가 시작 위치가 된다.

    위치를 지정하고 싶다면 다음과 같이 지정할 수 있다.

    @ComponentScan(
      basePackages = "com.example.packagename"
    )

     

    *권장하는 방법: 패키지 위치를 따로 지정하지 않고 설정 정보 클래스의 위치를 프로젝트 최상단에 두는 것이 좋다.

     

     

     

    컴포넌트 스캔 기본 대상

    • @Component
    • @Controller
    • @Service
    • @Repository
    • @Configuration

    @Controller등의 소스코드를 보면 @Component를 포함하고 있는 것을 볼 수 있다.

     

    또한 각각의 애노테이션은 다음의 부가 기능을 수행한다

    • @Controller : 스프링 MVC 컨트롤러로 인식
    • @Repositorty: 스프링 데이터 접근 계층으로 인식, 데이터 계층의 예외를 스프링 예외로 변환시킨다.
    • @Configuration: 스프링 설정 정보로 인식, 스프링 빈이 싱글톤을 유지하도록 추가 처리
    • @Service: 특별한 처리를 하지 않으나, @Service를 붙임으로써 개발자에게 핵심 비즈니스 로직의 위치를 알 수 있게 해줌

     

     


     

    필터

     

    • includeFilters : 컴포넌트 스캔 대상 추가 지정
    • excludeFilters : 컴포넌트 스캔 대상 제외

     

    사용하기 위해선 애노테이션을 정의해야한다

     

    IncludeFilters를 위한 애노테이션

     

    excludeFilters를 위한 애노테이션

     

    * 애노테이션의 설정 정보는 @Component의 애노테이션을 가져왔다

     

    @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

    댓글

Designed by Tistory.