- [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 [배움이 즐거운 개발자]
'Spring' 카테고리의 다른 글
[Spring] Environment 프로파일이란? (0) | 2020.01.13 |
---|---|
[Spring] Bean의 Scope (0) | 2020.01.13 |
[Spring] @Autowired 란? (0) | 2020.01.12 |
[Spring]-스프링 IoC컨테이너와 Spring Bean(스프링 빈) 이란? (0) | 2020.01.11 |
[Spring]RedirectAttributes (0) | 2020.01.05 |