이전까지 우리는 아래와같이 @Bean
을 통해 Spring 컨테이너에 Spring Bean을 등록했다.
등록해야 할 Bean이 많아질수록, 누락할 위험과 번거로움을 감수해야할 것이다.
따라서, Spring은
@ComponentScan
을 통해 설정 정보가 없어도 자동으로 Spring Bean을 등록하는 기능을 제공한다.
@ComponentScan
을 AppConfig와같은 설정 Class에 붙여주면 된다.
@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으로 자동 등록된다.