[Spring]컴포넌트 스캔, 컴포넌트 스캔 필터 by 인프런 김영한님

2022. 5. 31. 10:00·Back-End/Spring
  • 지금까지 스프링 빈을 등록할 때 구성파일에 @Bean을 사용했는데, 이는 관리할 빈이 많아지면 관리하가기 힘들어 진다.
  • @Component와 Component Scan을 이용하면 @Bean을 안쓰고 빈 등록이 가능하고, 빈 설정파일을 만들지 않아도 된다.
  • 빈 설정 파일이 없는데 의존관계를 주입하는 방법?
    → @Autowired를 사용해 자동 의존관계 주입을 한다.

컴포넌트 스캔

  • @Component 를 가진 모든 대상을 가져와서 빈에 등록하기 위해 찾는 과정
    → 빈 설정파일 + @Bean을 통해 빈을 하나하나 지정할 필요가 없음
  • @Component애노테이션이 붙은 클래스를 스캔해서 자동 스프링 빈으로 등록해준다.
@Component 
public class MemberServiceImpl implements MemberService {     
	private final MemberRepository memberRepository;    
    
    @Autowired     
    public MemberServiceImpl(MemberRepository memberRepository) {         
    	this.memberRepository = memberRepository;     } 
    }
  • MemverServiceImpl 클래스에 @Component를 추가해서 자바 빈에 등록
  • 생성자에 @Autowired를 지정해서 생성자를 주입(스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아서 주입해줌)

컴포넌트 스캔의 특징

  • Bean이름의 기본 설정 : 가장 앞 문자를 소문자로 한 것이 Bean이름 이 된다.
    ex) OrderServiceImpl → orderServiceImpl
  • Bean이름을 수동으로 설정 하는 방법 : @Component(”지정할 이름”)

컴포넌트 스캔 대상

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

컴포넌트 스캔 범위

  • @ComponentScan : 어노테이션이 있는 파일의 패키지 아래를 스캔한다.
  • basePackages / basePackageClasses로 지정도 가능
  • 권장 방법 : 구성파일에 등록시 프로젝트 최상단에 두는것을 권장함

→ SpringBoot는 @SpringBootApplication에 포함되어 있어서 자동으로 최상단으로 유지된다.


필터 : 컴포넌트 스캔대상 추가 or 제외

  • includeFilters : 컴포넌트 스캔 대상을 추가로 지정한다.
  • excludeFilters : 컴포넌트 스캔에서 제외할 대상을 지정
package hello.core.scan.filter;  
@MyIncludeComponent     
public class BeanA { }
  • BeanA : @MyIncludeComponent 적용
package hello.core.scan.filter;  
@MyExcludeComponent     
public class BeanB { }
  • BeanB : @MyExcludeComponent 적용

  • includeFilters에는 MyIncludeComponent.class가 등록되어 컴포넌트 스캔에 추가된다.
  • excludeFilters에는 MyExcludeComponent.class가 등록되어 컴포넌트 스캔에서 제외 된다.

FilterType 옵션

  • ANNOTATION : 기본값, 어노테이션을 인식해서 동작
  • ASSIGNABLE_TYPE : 지정한 타입과 자식 타입을 인식해서 동장
  • ASPECTJ : AspectJ패턴 사용
  • REGEX : 정규표현식
  • CUSTOM : TypeFilter라는 인터페이스를 구현해서 처리
반응형
'Back-End/Spring' 카테고리의 다른 글
  • [Spring] 빈 생명주기 콜백
  • [Spring] 의존관계 주입 방법
  • [Spring] BeanFactory와 ApplicationContext, 자바코드와 XML설정, 스프링 빈 설정 메타 정보 by 인프런 김영한님
  • 스프링 핵심 원리 - 싱글톤 컨테이너, @Configuration by 인프런 김영한님
LightSource
LightSource
어제보단 발전한 오늘의 나를 위한 블로그
    반응형
  • LightSource
    LightSourceCoder
    LightSource
  • 전체
    오늘
    어제
    • 분류 전체보기 (152)
      • Git (4)
      • Language (6)
        • Java (6)
      • Back-End (63)
        • Spring Boot (4)
        • MyBatis (1)
        • Oracle (1)
        • PL SQL (3)
        • JPA (26)
        • Spring Data JPA (5)
        • Spring MVC (8)
        • Spring (12)
        • Spring Security (2)
        • Redis (1)
      • Front-End (38)
        • 아이오닉 (2)
        • JSP (7)
        • JavaScript (4)
        • React (16)
        • TypeScript (3)
        • Angular (6)
      • AWS (1)
      • CI & CD (1)
      • 개발지식 (13)
        • 네트워크 (9)
        • CS 지식 (4)
      • 데이터모델링 (2)
      • Tool (1)
      • 프로젝트 (5)
      • 독후감 (2)
      • 잡생각 (0)
      • 면접 준비 (1)
      • 알고리즘 (14)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    react
    배열요소수정
    배요소열추가
    리액트
    배열요소삭제
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
LightSource
[Spring]컴포넌트 스캔, 컴포넌트 스캔 필터 by 인프런 김영한님
상단으로

티스토리툴바