티스토리 뷰

자바/스프링

컴포넌트 스캔

tioon 2023. 6. 26. 04:19
컴포넌트 스캔이란?

-스프링이 직접 클래스를 검색해서 빈으로 등록해주는 기능입니다. 직접 수동으로 빈을 등록하지않아도, 코드에 컴포넌트라고 표시만 해주면 스프링이 컴포넌트로 지정된 부분을 찾아서 자동으로 빈으로 등록을 해주는 기능입니다.

 

컴포넌트 스캔 과정

  1. 스캔 대상 패키지 지정
    - 컴포넌트 스캔을 수행할 패키지를 지정하여 스프링이 스캔을 해야하는 패키지를 지정합니다.
    @ComponentScan 애노테이션을 통해 스캔 대상 패키지를 지정할 수 있습니다.

  2. 클래스 탐색
    -지정된 패키지 내부에 있는 클래스들을 탐색합니다. 전체 클래스를 탐색하며, 컴포넌트로 지정된 클래스들만 찾아서 스캔합니다.

  3. 어노테이션 탐색
    -클래스들을 스캔하면서 컴포넌트만 찾기위해 @Component 어노테이션을 찾습니다. 해당 어노테이션은 사용자가 컴포넌트로 지정을 한것이므로, 컴포넌트 스캔 대상이 됩니다.
    (이때, @Configuration ,@Controller ,@Service ,@Repository 등의 어노테이션도 컴포넌트 스캔 대상이 됩니다.)

  4. 빈 등록
    -스캔된 클래스들은 스프링 컨테이너에 빈으로 등록됩니다. 이때 빈으로 저장될때 빈의 이름은 보통은 컴포넌트 설정된 클래스의 첫문자를 소문자로 변환한 이름입니다. 또한 사용자가 직접 이름을 지정하여 빈으로 등록할 수 도 있습니다.

 

컴포넌트 스캔 방법
  • @ComponentScan
@Configuration
@ComponentScan(basePackages = "com.example.myapp")
public class MyConfiguration {
    
    @Bean
    public MyBean myBean() {
        return new MyBean();
    }
}

@ComponentScan은 스프링에서 컴포넌트 스캔을 수행하기 위해 사용되는 어노테이션으로 , 해당 어노테이션으로 지정된 패키지에서 @Component 어노테이션이 부여된 클래스들을 스캔하여 자동으로 빈으로 등록하는 기술입니다.
다만, 스프링 부트에선 @ComponentScan이 자동으로 구현이 되어있어 따로 @ComponentScan을 안해도 자동으로 @Component를 찾아줍니다.
(스프링 부트에서 @ComponentScan을 구현하고 싶으시면 main에 있는 @SpringBootApplication에 추가구현을 하셔야합니다.)

 

 

컴포넌트 스캔 옵션
  • 단일 패키지 스캔
@ComponentScan(basePackages = "com.example.package")
  • 여러 패키지 스캔
@ComponentScan(basePackages = {"com.example.package1", "com.example.package2"})
  • 기본 패키지 자동 감지
@ComponentScan
  • 스캔 제외
@ComponentScan(
    basePackages = "com.example.package",
    excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = MyExcludeAnnotation.class),
  )
  • 스캔 포함
@ComponentScan(
    basePackages = "com.example.package",
    includeFilters = @ComponentScan.Filter(type = FilterType.REGEX, pattern = "com.example.package2"),
)

 

 

 

'자바 > 스프링' 카테고리의 다른 글

@Autowired 자동주입  (0) 2023.06.26
빈(Bean) 등록 심화  (0) 2023.06.26
WAS(Web Application Server) , DispatcherServlet  (0) 2023.06.24
스프링 Controller, Repositroy, Service  (0) 2023.05.30
빈(Bean)등록 (컴포넌트,빈)  (0) 2023.05.30
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함