본문 바로가기
Spring

Spring Annotation 8. @ComponentScan

by Status Code 2023. 4. 19.

스프링 프레임워크에서는 @ComponentScan 어노테이션을 사용하여 특정 패키지와 그 하위 패키지를 스캔하여 @Component, @Service, @Repository, @Controller 등의 어노테이션이 붙은 클래스를 찾아 빈으로 등록할 수 있습니다. 이를 통해 스프링 빈 컨테이너가 해당 클래스들을 관리하게 되고, 의존성 주입(Dependency Injection)을 수행할 수 있습니다.

 

@ComponentScan이란?


@ComponentScan은 스프링 프레임워크의 어노테이션 중 하나로, 특정 패키지와 그 하위 패키지를 스캔하여 @Component, @Service, @Repository, @Controller 등의 어노테이션이 붙은 클래스를 찾아 빈으로 등록하는 역할을 합니다. 기본적으로 @ComponentScan은 @Configuration이 붙은 설정 클래스와 함께 사용됩니다. 설정 클래스에서 @ComponentScan을 사용하면, 해당 클래스가 위치한 패키지를 기준으로 스캔이 수행됩니다. basePackages 속성을 사용하여 스캔할 패키지의 범위를 지정할 수도 있습니다.

 

@ComponentScan 예제
com.example.demo.MyComponent.java:

package com.example.demo;

import org.springframework.stereotype.Component;

@Component
public class MyComponent {
    public String sayHello() {
        return "Hello, World!";
    }
}

com.example.demo.config.AppConfig.java:

package com.example.demo.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan(basePackages = "com.example.demo")
public class AppConfig {
}

위 예제에서, AppConfig 설정 클래스에 @ComponentScan 어노테이션이 붙어 있습니다. 이를 통해 com.example.demo 패키지와 그 하위 패키지를 스캔하여 MyComponent 클래스를 찾아 빈으로 등록하게 됩니다.

@ComponentScan을 사용하지 않는 경우, 스프링 부트 애플리케이션에서는 @SpringBootApplication 어노테이션에 내장된 @ComponentScan이 기본적으로 수행됩니다. 이때 스캔 범위는 @SpringBootApplication이 붙은 클래스가 위치한 패키지와 그 하위 패키지로 설정됩니다. 따라서 일반적인 스프링 부트 애플리케이션에서는 명시적으로 @ComponentScan을 사용할 필요가 없습니다.

'Spring' 카테고리의 다른 글

Spring Annotation 10. @Service  (0) 2023.04.19
Spring Annotation 9. @Component  (0) 2023.04.19
Spring Annotation 7. @Transactional  (0) 2023.04.19
Spring Annotation 6. @Autowired  (0) 2023.04.19
Spring Annotation 5. @RequestParam  (0) 2023.04.19

댓글