Spring @ComponentScan과 @Autowired

김두현·2023년 5월 20일
1

Spring

목록 보기
8/13
post-thumbnail

@ComponentScan

이전까지 우리는 아래와같이 @Bean을 통해 Spring 컨테이너에 Spring Bean을 등록했다.

  • AppConfig.java

등록해야 할 Bean이 많아질수록, 누락할 위험과 번거로움을 감수해야할 것이다.

따라서, Spring은 @ComponentScan을 통해 설정 정보가 없어도 자동으로 Spring Bean을 등록하는 기능을 제공한다.

@ComponentScan을 AppConfig와같은 설정 Class에 붙여주면 된다.


@ComponentScan 적용

  • AutoAppConfig.java
    위에서 본 AppConfig와 다르게 @Bean으로 등록한 Class가 없다.
    놀랍게도, 해당 Class 내부에는 더이상 코드를 작성할 필요가 없다.

@ComponentScan@Component가 붙은 Class 스캔하여 Spring Bean으로 등록한다.

따라서 이제 각 Class가 스캔되도록 @Component를 붙이자.
추가로 Class 내에 @Autowired도 붙여줘야하는데, 아래에서 설명한다.
이후 Spring Bean을 조회하면, 정상적으로 등록되었음을 확인할 수 있다.
이때, Spring bean의 이름은 기본값으로 맨 앞글자만 소문자로 바꾼 Class명을 사용한다.
ex) RateDiscountPolicy \to rateDiscountPolicy


@ComponentScan 스캔 대상

@ComponentScan은 위에서 언급한 @Component 뿐만 아니라, 아래 대상도 스캔하여 Bean으로 등록한다.

  • @Component : 스캔 대상
  • @Service : 스캔 대상
  • @Controller : MVC 패턴의 Controller로 인식한다.
  • @Repository : Data 접근 계층으로 인식한다.
  • @Configuration : Spring 설정 정보로 인식한다.

@Autowired

위 과정을 통해 우리는 Spring Bean을 등록했을 뿐, AppConfig에서와 같이 의존관계를 주입하지 않았다.

따라서, Spring은 의존관계도 자동으로 주입하는 @Autowired 기능도 제공한다.

구현체를 필요로하는 Class에 다음과같이 @Autowired를 붙여주자.
이때 의존관계 주입 방법으로는 여러 가지가 있는데, Spring @Autowired 의존관계 주입에서 자세히 알아보자.


Springboot와 @ComponentScan

본 포스팅에서는 설명을 위해 AutoConfig 등의 수동 설정 방식을 설명했다.
그러나 Springboot에서 기본적으로 @ComponentScan을 제공하기 때문에,

Springboot 사용 시 스캔 대상만 지정해주면 Bean으로 자동 등록된다.


참고 자료

https://www.inflearn.com/course/스프링-핵심-원리-기본편


💕오류 지적 및 피드백은 언제든 환영입니다. 복제시 출처 남겨주세요!💕
💕좋아요와 댓글은 큰 힘이 됩니다.💕
profile
I AM WHO I AM

0개의 댓글