[Spring] @Component Scan 컴포넌트 스캔?

2020년 01월 13일 by Xion

    [Spring] @Component Scan 컴포넌트 스캔? 목차

@Componentscan

-@Component어노테이션 및 streotype(@Service, @Repository, @Controller.)어노테이션이 부여된 Class들을 자동으로 Scan하여 Bean으로 등록해주는 역할을 하는 어노테이션입니다.

 

 


이전 xml파일에 <context:component-scan base-package="패키지 경로"/>를 이용해 지정해주었던 것을 Java파일을 이용하여 bean을 scan하기 위해서 생겨났습니다.

 

예제 

1. 프로젝트 구조

Application Class : Main

ApplicationConfig Class: Bean설정을 어노테이션 기반으로 처리하기 위한 클래스

BookRepository Class: Bean으로 등록되기 위한 Class

 

2. Class

2.1 BookRepository

@Repository

public class BookRepository {}

Bean으로 등록되기 위한 클래스입니다. 상단에 @Repository 어노테이션을 부여하여 Bean으로 등록하기 위한 준비를 마쳤습니다.

 


2.2 ApplicationCon

@Configuration

@ComponentScan

public class ApplicationConfig {}

우선 @Configuration어노테이션을 이용하여 Bean 설정 파일(XML 파일을 대체하는)임을 알려주고, @ComponentScan어노테이션을 이용해 빈으로 등록되기 위한 어노테이션이 부여된 클래스들을 자동으로 IoC컨테이너에 등록하도록 했습니다.


2.3 Application

public class Application {
    public static void main(String[] args) {

        ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class);

​

        BookRepository repository = (BookRepository)context.getBean("bookRepository");

        System.out.println(repository != null);

    }
}
​
== 결과 ==

true

Annotaion을 기반으로 Bean들을 등록하기 위해서는 AnnotaionConfigApplicationContext를 이용해야 합니다. AnnotationConfigApplicationContext의 매개변수로 Bean설정 클래스인 ApplicationConfig를 넘겨주었습니다.

 

 

ComponentScan의 범위

@ComponentScan 어노테이션은 Scan범위를 지정할 수 있습니다.

 


1. basePackages

@Configuration

@ComponentScan(basePackages = "com.mins.spring")

public class ApplicationConfig {}

basePackages의 경우 괄호안에 직접 패키지경로를 직접 적어주어 스캔할 위치를 지정할 수 있습니다.

이 경우 typesafe하지 않기 때문에 조금만 철자가 잘못되더라도 scan을 못하는 오류가 나타날 수 있습니다.

 

2. basePackageClasses

@Configuration
@ComponentScan(basePackageClasses = Application.class)
public class ApplicationConfig {}

basePackageClasses의 경우에는 괄호안에 적힌 Class가 위치한 곳에서부터 모든 어노테이션이 부여된 Class를 빈으로 등록해줍니다. Class를 통해 기입하기 때문에 훨씬 Typesafe한 방법입니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

더보기



출처: https://galid1.tistory.com/510?category=769011 [배움이 즐거운 개발자]