본문 바로가기
BackEnd/Spring

[Spring] 스프링(Spring) 핵심 기술 이야기 3부 - @Component와 컴포넌트 스캔

by 뽀뽀이v 2020. 10. 7.

이 글은 백기선 님의 스프링 프레임워크의 핵심 기술 강의를 듣고 복습 차원에서 적은 글입니다.

 

컴포넌트 스캔 주요 기능

  • 스캔 위치 설정
  • 필터 : 어떤 어노테이션을 스캔할지 또는 하지 않을지 설정이 가능하다.
// XML 방식
<context:component-scan>

// Java 방식
@SpringBootApplication
public class Spring01Application {

    public static void main(String[] args) {
        SpringApplication.run(Spring01Application.class, args);
    }

}

// @SpringBootApplication
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
    ...
}

컴포넌트 스캔은 자동으로 빈을 등록해준다. Java 방식 기준으로는 @SpringBootApplication 파일 이하에 모든 빈을 등록하고 @Filter를 통해서 원하지 않는 어노테이션을 제외할 수 있다.

 

@Component 

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

컴포넌트 스캔은 @Component 어노테이션을 사용한 클래스들을 모두 빈으로 등록한다.

실제로 @Repository, @Service, @Controller, @Configuration 등의 어노테이션을 접근하면 모두 상단에 @Component 어노테이션이 존재한다.

// @Controller
@Component
public @interface Controller {
    @AliasFor(
        annotation = Component.class
    )
    String value() default "";
}

 

실제 성능상으로 Function을 사용하여 빈을 등록하는 방법이 존재한다. 그러나 일일이 등록을 해야 하는 방식이므로 소스 관리 차원으로 봤을 때는 추천하지 않는다.

댓글