큐범
Just do debug
큐범
전체 방문자
오늘
어제
  • 전체보기 (128)
    • 회고 (4)
    • JAVA (16)
      • JAVA 기초 (18)
      • JAVA Algorithm, Datastruct (13)
    • Spring (11)
    • Micro Service Architecture (3)
    • JPA (6)
    • gRPC (4)
    • Network (8)
    • Process (7)
    • Cloud (4)
    • Python (10)
    • Web(vue) (2)
    • UMC (1)
    • DB (9)
    • CS (1)
    • Clean Code (1)
    • TDD (9)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.
큐범

Just do debug

[Spring] 컴포넌트 스캔(Component Scan)
Spring

[Spring] 컴포넌트 스캔(Component Scan)

2022. 8. 24. 01:39

Component

구성요소, 독립적인 단위 모듈이다.

유저가 사용하는 시스템에 대한 조작장치를 뜻한다.

 

 

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

 

1.     @ComponentScan

@ComponentScan은 @Component가 붙은 모듈 클래스를 스프링 빈으로 등록한다.

-       빈 이름 기본 전략: CustomerServiceImpl -> customerServiceImpl

-       빈 이름 직접 지정: @Component("customerService")

 

2.     @Autowired 의존관계 자동 주입

생성자에 @Autowired 를 지정하면, 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아서 주입한다. 기본 조회 전략은 타입이 같은 빈을 찾아서 주입한다.

따라서, 생성자에 파라미터가 많아도 찾아서 자동으로 주입한다.

 

컴포넌트 스캔 기본 대상

@Compoent: 컴포넌트 스캔에서 사용

@Controlller : 스프링 MVC 컨트롤러에서 사용

@Service : 스프링 비즈니스 로직에서 사용

@Repository : 스프링 데이터 접근 계층에서 사용

@Configuration : 스프링 설정 정보에서 사용

 

다음은 스프링에서 부가 기능을 수행한다.

@Controller : 스프링 MVC 컨트롤러로 인식

@Repository : 스프링 데이터 접근 계층으로 인식하고, 데이터 계층의 예외를 스프링 예외로 변환해준다.

@Configuration : 앞서 보았듯이 스프링 설정 정보로 인식하고, 스프링 빈이 싱글톤을 유지하도록 추가 처리를 한다.

@Service : 특별한 처리를 하지 않는다. 대신 개발자들이 핵심 비즈니스 로직이 해당 클래스에 있는 것을 인지한다.

 

필터

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

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

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

)
static class ComponentFilterAppConfig{
}

FilterType 옵션

ANNOTATION: 기본값, 애노테이션을 인식해서 동작한다

ASSIGNABLE_TYPE: 지정한 타입과 자식 타입을 인식해서 동작한다.

ASPECTJ: AspectJ 패턴 사용

REGEX: 정규 표현식

CUSTOM: TypeFilter 이라는 인터페이스를 구현해서 처리

 

출처 : 인프런 - 스프링 기본원리 핵심편. 김영한 강사

    'Spring' 카테고리의 다른 글
    • [Spring] @Async vs WebFlux
    • [Spring] 의존관계 자동 주입
    • [Spring] 웹 애플리케이션과 싱글톤
    • [Spring] BeanFactory와 ApplicationContext
    큐범
    큐범

    티스토리툴바