Spring [핵심] 컴포넌트 스캔과 의존관계 자동 주입

신재원·2023년 1월 9일
0

Spring 핵심

목록 보기
14/19

스프링 핵심원리

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

  • 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 "컴포넌트 스캔"이라는 기능을 제공 ( @ComponentScan )

  • 의존관계도 자동으로 주입하는 "@Autowired"라는 기능도 제공한다

  • @Component : 어노테이션이 붙은 클래스를 스캔해서 스프링 빈으로 등록한다. (각 클래스가 "컴포넌트 스캔"의 대상이 되도록 어노테이션을 붙여준다.)

탐색 위치와 기본 스캔 대상

  • 해당 hello -> core -> member 패키지만 컴포넌트 스캔의 대상이된다

    • ex : @ComponentScan( basePackages = "hello.core.member",)
  • 여러 시작 위치를 지정할수도 있다.

    • ex : @ComponentScan( basePackages ="hello.core","hello.service")
  • default로 지정하지 않으면 -> @ComponetnScan이 붙은 설정 정보 클래스의 패키지가 시작위치가 된다.

  • 권장하는 방법 -> 패키지 위치를 지정하지않고, 설정 정보 클래스의 위치를 최상단에 두는것이다.

  • 스프링 부트를 사용하면 "자동으로 @ComponentScan"이 들어있다.

필터 == 잘 사용 X

  • includeFilters : 컴포넌트 스캔 대상을 추가로 지정한다.

  • excludeFilters : 컴포넌트 스캔에서 제외할 대상을 지정한다.

  • FilterType 옵션

    • ex : @Component.Filter(type = FilterType. ~)
      • ANNOTATION : 기본값
      • ASSIGNABLE_TYPE : 클래스를 직접 지정
      • ASPECTJ : AspectJ 패턴 사용
      • REGEX : 정규 표현식
      • CUSTOM : TypeFilter 이라는 인터페이스를 구현해서 처리

중복 등록과 충돌 (컴포넌트 스캔상황에서)

  • 1번 케이스 : 자동 빈 등록 vs 자동 빈 등록
    • 예외 발생
  • 2번 케이스 : 수동 빈 등록 vs 자동 빈 등록 (빈번히 발생)
    • 수동 빈 등록이 우선권을 가져 자동빈을 오버라이딩 한다.

0개의 댓글