nyximos.log

[Spring] 컴포넌트 스캔과 @Autowired 본문

Programming/Spring

[Spring] 컴포넌트 스캔과 @Autowired

nyximos 2022. 1. 12. 15:38

자바코드의 @Bean이나 XML의 <bean>등을 통해 개발자가 직접 스프링 빈을 등록해야 했지만

이렇게 직접 등록할 때는 단점이 많다.

1. 귀찮다.

2. 설정 정보가 커진다.

3. 누락할 수도 있다.

 

🤹‍♀️ 그래서 스프링은 컴포넌트 스캔 기능을 제공한다.

@ComponentScan

설정 정보에 붙이면 자동으로 스프링 빈을 등록한다.

+ @Configuration에도 @Component가 붙어있다.

 

@Autowired

의존관계를 자동으로 주입한다.

생성자에서 여러 의존관계를 한꺼번에 주입받을 수도 있다.

 

 

컴포넌트 스캔과 자동 의존관계 주입 동작 순서

1. @ComponentScan
    : @Component가 붙은 모든 클래스를 스프링 빈으로 등록한다.

2. @Autowired 의존관계 자동 주입

    : 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아 주입한다.

 

 

basePackages

탐색할 패키지의 시작위치를 지정할 수 있다. 

지정하지 않으면 @ComponentScan이 붙은 설정 정보 클래스의 패키지가 시작위치가 된다.

+ 설정 정보 클래스의 위치를 프로젝트 최상단에 두면 편하다.

 

 

컴포넌트 스캔 기본 대상

  • @Controller : 스프링 MVC 컨트롤러로 인식
  • @Repository : 스프링 데이터 접근 계층으로 인식하고, 데이터 계층의 예외를 스프링 예외로 변환해준다.
  • @Configuration : 앞서 보았듯이 스프링 설정 정보로 인식하고, 스프링 빈이 싱글톤을 유지하도록 추가 처리를 한다.
  • @Service : 개발자들이 작성한 핵심 비즈니스 로직이 여기에 있겠구나 라고 비즈니스 계층을 인식하는데 도움이 된다

 

 

Filter

includeFilters : 컴포넌트 스캔 대상을 추가로 지정한다.

excludeFilters를 이용하면 컴포넌트 스캔 대상에서 제외할 설정정보를 지정할 수 있다.

 

 

FilterType 옵션

  • ANNOTATION: 기본값, 애노테이션을 인식해서 동작한다.
  • ASSIGNABLE_TYPE: 지정한 타입과 자식 타입을 인식해서 동작한다.
  • ASPECTJ: AspectJ 패턴 사용
  • REGEX: 정규 표현식
  • CUSTOM: TypeFilter 이라는 인터페이스를 구현해서 처리

 

 

참조

김영한, 스프링 핵심 원리 - 기본편 https://inf.run/ryWP

 

스프링 핵심 원리 - 기본편 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 백엔드 개발자가 되어보세요! 📢

www.inflearn.com