[Spring] 김영한 스프링 핵심원리 기본_chap06 컴포넌트 스캔

HMS·2023년 4월 3일

해당 내용은 김영한 스프링 핵심원리 기본 강의를 들으며 강의 자료를 참고하여 정리한 내용입니다.

김영한 스프링 핵심원리 기본 바로가기


Chap06. 컴포넌트 스캔

컴포넌트 스캔과 의존관계 자동주입 시작하기

지금까지 스프링에서 빈을 등록하기 위해서는 @Bean을 사용하거나 XML 구성을 이용했다. 하지만 수십, 수백 개의 빈을 일일이 등록하는 것은 번거롭고 오류가 발생하기 쉽다. 스프링은 이러한 문제를 해결하기 위해 @ComponentScan이라는 기능을 제공한다. 이는 자동으로 빈을 등록하고, @Autowired를 통해 의존관계도 자동으로 주입한다.

@ComponentScan

  • @ComponentScan@Component가 붙은 모든 클래스를 찾아서 스프링 빈으로 등록한다.
  • @Configuration도 내부적으로 @Component를 포함하고 있다.
  • 수동으로 설정한 클래스나 테스트 설정 클래스는 제외해야 한다.
  • 실무에서는 일반적으로 컴포넌트를 스캔 대상에서 제외하지 않는다.
  • AppConfig에서는 @Bean으로 등록과 의존관계를 직접 명시했지만, 이제는 설정 정보가 없기에 클래스 내부에서 자동으로 처리한다.

자동 의존관계 주입

  • 생성자에 @Autowired를 지정하면, 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아서 주입한다.
  • 기본적으로는 같은 타입의 빈을 찾아서 주입한다.
  • 생성자에 파라미터가 여러 개 있어도 모두 자동으로 찾아서 주입한다.

탐색 위치와 기본 스캔 대상

  • @ComponentScan으로 탐색할 패키지와 시작 위치를 지정할 수 있다.
  • basePackages: 탐색할 패키지의 시작 위치를 지정한다. 지정된 패키지와 그 하위 패키지를 모두 탐색한다.
  • basePackageClasses: 지정한 클래스의 패키지를 탐색 시작 위치로 사용한다.
  • 설정정보 클래스의 위치를 프로젝트 최상단에 두는 것이 일반적이다. 스프링 부트에서는 @SpringBootApplication을 사용하며, 이 안에 @ComponentScan이 포함되어 있다.

컴포넌트 스캔 기본 대상과 부가기능

  • @Component, @Service, @Controller, @Repository, @Configuration 등이 스프링 빈으로 등록될 수 있는 대표적인 어노테이션들이다.
  • 이들 어노테이션은 모두 @Component를 내장하고 있다.

필터

  • @ComponentScan에는 필터 옵션이 있다. 이를 통해 스캔 대상을 세밀하게 조절할 수 있다.
  • 필터 타입에는 ANNOTATION, ASSIGNABLE_TYPE, ASPECTJ, REGEX, CUSTOM 등이 있다.

중복 등록과 충돌

  • 같은 빈 이름을 가진 컴포넌트가 스캔될 때 충돌 문제가 발생할 수 있다.
  • 자동 빈 등록끼리 충돌하면 ConflictingBeanDefinitionException 오류가 발생한다.
  • 수동 빈 등록 vs 자동 빈 등록의 경우, 수

동 빈이 우선권을 가지고 자동 빈을 오버라이딩한다.

  • 스프링 부트에서는 기본적으로 이런 충돌이 발생하면 오류를 발생시키도록 설정되어 있다.
profile
안녕하세요

0개의 댓글