Spring Study -2주차-

ChapJun·2021년 12월 3일
0

주제 : 스프링 컴포넌트 스캔

Bean vs ComponentScan

IoC Container는 @Configuration, @Bean, @Component, @Repository, @Service, @Controller가 달린 클래스를 감지하며 빈을 가져오기 위해 스캐닝을 한다.

@Bean

  • @Bean은 개발자가 직접 제어가 불가능한 외부 라이브러리를 사용할 때 사용한다.
  • 즉, 개발자가 작성한 메소드를 통해 반환되는 객체를 Bean으로 만든다.

@Component

  • 개발자가 직접 작성한 Class를 Bean 으로 만드는 것이다.
  • 즉, @Component 어노테이션은 "이 클래스를 정의했으니 빈으로 등록하라" 는 뜻이 된다.

@Bean, @Component 비교

@Bean@Component
선언 레벨Method LevelClass Level (Interface, enum)
사용 용도개발자가 컨트롤이 불가능한 외부 라이브러리개발자가 컨트롤이 가능한 Class

ComponentScan

  • ComponentScan을 통해서 Component 어노테이션이 붙은 객체들을 스프링 컨테이너에 스프링 빈으로 등록하게 된다.
  • ComponentScan은 @SpringBootApplication 어노테이션을 열어서 보면 상단에 걸려있다. 즉, 메인 메소드의 패키지부터 스캔한다.

  • 스캔되는 범위는 @ComponentScan이 명시된 클래스가 위치한 디렉토리를 포함해서 그 하위 디렉토리들이다. (basePackages나 basePackagesClasses 옵션 값으로 변경가능)

  • 컴포넌트 스캔 대상
  1. @Component (컴포넌트 스캔에 사용)
    1. @Controller (스프링 MVC Controller에서 사용)
    2. @Service (스프링 비즈니스 로직에서 사용)
    3. @Repository (스프링 데이터 접근계층에서 사용)
    4. @Configuration (스프링 설정 정보에서 사용)
profile
Chap Chap

0개의 댓글