풀스택 웹🌐 개발자 지망생 🧑🏽‍💻
➕ 인공지능 관심 🤖


Categories


Recent views

  • 1
  • 2
  • 3
  • 4
  • 5

Spring5 입문 - 컴포넌트 검색(Component Scan)

  1. @Component
    • @ComponentScan

      컴포넌트 검색(Component Scan)

      🗣️ 출처

      _ 초보 웹 개발자를 위한 스프링 5 프로그래밍 입문 _와 스프링 인 액션 의 내용을 바탕으로 정리한 내용입니다.

      @Component

      @Component가 붙어있는 클래스는 컴포넌트 검색에 의해 빈(bean)으로 등록될 수 있다.

      🧾️ @Component 사용례
      package spring;
      import org.springframework.stereotype.Component;
      
      @Component // memberDao 라는 이름으로 빈 객체 등록
      public class MemberDao{
      
      }
      @Component("infoPrinter") // infoPrinter 라는 이름으로 빈 객체 등록
      public class MemberInfoPrinter{
      
      }
      

      컴포넌트들은 패키지 별로 같은 이름이 있으면 충돌하며, 수동 등록한 빈이 있으면 수동 등록이 우선수되므로 명시적으로 이름을 바꿔주거나 네이밍 규칙을 잘 선정하자.

      @ComponentScan

      앞서 @Component를 붙인 클래스들을 스캔하려면 기존의 구성 클래스를 이용하면 된다.

      🧾️ @ComponentScan 사용례
      import org.springframework.context.annotation.ComponentScan;
      @Configuration // 스프링 구성 클래스 임을 표시
      @ComponentScan(basePackages = {"spring"} // spring 패키지 내의 @Component 탐색
      	excludeFilters = {
      	@Filter(type = FilterType.ASPECTJ, pattern = "spring.*Dao"),//Dao로 끝나는 클래스 타입은 스캔에서 제외, aspectjweaver 모듈 필요
      	@Filter(type = FilterType.ASSIGNABLE_TYPE, classes=MemberDao.class)//MemberDao 타입과 그 자식 클래스들 제외
      	})
      public class AppCtx {
      	//...
      }
      

      @ComponentScan의 스캔에 제외하려면 excludeFilters 속성에 Regex, Aspectj 등의 필터를 사용할 수 있다.
      - FilterType.ANNOTATION 필터 타입을 이용하면 특정 애노테이션을 붙인 클래스도 제외 가능

      추가로 다음과 같은 어노테이션이 붙은 클래스들 또한 스캔된다.

      • @Controller
      • @Service
      • @Repository
      • @Aspect
      • @Configuration
        위 어노테이션들은 @Aspect를 제외하곤 실제로 @Component 기능을 상속받은 특수 애노테이션들이다.