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

등록해야 할 Bean이 많아질수록, 누락할 위험과 번거로움을 감수해야할 것이다.
따라서, Spring은
@ComponentScan을 통해 설정 정보가 없어도 자동으로 Spring Bean을 등록하는 기능을 제공한다.
@ComponentScan을 AppConfig와같은 설정 Class에 붙여주면 된다.
위에서 본 AppConfig와 다르게 @Bean으로 등록한 Class가 없다.
@ComponentScan은@Component가 붙은 Class 스캔하여 Spring Bean으로 등록한다.
따라서 이제 각 Class가 스캔되도록 @Component를 붙이자.
추가로 Class 내에 @Autowired도 붙여줘야하는데, 아래에서 설명한다.



이후 Spring Bean을 조회하면, 정상적으로 등록되었음을 확인할 수 있다.

이때, Spring bean의 이름은 기본값으로 맨 앞글자만 소문자로 바꾼 Class명을 사용한다.
ex) RateDiscountPolicy rateDiscountPolicy
@ComponentScan은 위에서 언급한 @Component 뿐만 아니라, 아래 대상도 스캔하여 Bean으로 등록한다.
@Component : 스캔 대상@Service : 스캔 대상@Controller : MVC 패턴의 Controller로 인식한다.@Repository : Data 접근 계층으로 인식한다.@Configuration : Spring 설정 정보로 인식한다.위 과정을 통해 우리는 Spring Bean을 등록했을 뿐, AppConfig에서와 같이 의존관계를 주입하지 않았다.
따라서, Spring은 의존관계도 자동으로 주입하는
@Autowired기능도 제공한다.
구현체를 필요로하는 Class에 다음과같이 @Autowired를 붙여주자.

이때 의존관계 주입 방법으로는 여러 가지가 있는데, Spring @Autowired 의존관계 주입에서 자세히 알아보자.
본 포스팅에서는 설명을 위해 AutoConfig 등의 수동 설정 방식을 설명했다.
그러나 Springboot에서 기본적으로 @ComponentScan을 제공하기 때문에,
Springboot 사용 시 스캔 대상만 지정해주면 Bean으로 자동 등록된다.
