이전까지 스프링 빈 등록할 때 자바 코드의 @Bean이나 XML의 <bean>을 통해서 일일이 설정 정보에 직접 등록할 빈을 나열했다. 하지만 지금까지는 등록할 빈이 몇 개 되지 않았기 때문에 문제가 안됐지만 빈의 개수가 늘어나면 직접 등록하는 작업에 부담을 느끼게 된다.
그래서 스프링은 설정 정보 없이 자동으로 스프링 빈 등록을 해주는 컴포넌트 스캔이라는 기능을 제공한다.
또 의존 관계도 자동으로 주입하는 @Autowired 기능도 제공한다.
코드를 통해서 컴포넌트 스캔과 자동 주입에 대해 알아보자.
설명에 앞서 설정 정보가 없어도 자동으로 등록해준다고 했지만 설정 정보를 만든 상태에서 컴포넌트 스캔을 사용하는 코드를 보고 설정 정보가 없는 상태의 코드를 보겠다.
@Configuration은 많이 봤던 어노테이션이므로 설명은 생략하고 @ComponentScan을 사용한 이유에 대해 설명하겠다.
@ComponentScan을 사용함으로써 @Component가 적힌 클래스를 스프링 빈에 등록해놓는다. (excludeFilters를 작성한 이유는 이전에 @Bean으로 빈 등록을 해놓은 설정 정보는 읽지 않고 넘어가기 위해 작성하였다.)
예를 들어, Equipment 인터페이스를 구현한 Glove 클래스에 @Component 어노테이션을 작성했으니 자동으로 스프링 빈 등록을 해주고 이전에 우리가 사용했던 방식 그대로 사용할 수 있다. 정말 이렇게만 해도 빈에 등록이 되는지 확인하지 위해 다른 클래스도 빈 등록을 해놓고 테스트를 진행해보자.
Glove 클래스를 주입받아서 사용할 Pitcher 클래스도 @Component를 작성해서 스프링 빈에 등록해주고 @Autowired로 Equipment 인터페이스를 구현한 Glove 클래스를 주입해주도록 하자. 그리고 테스트에서는 Pitcher 클래스가 제대로 스프링 빈에 등록이 됐는지 확인하는 것과 Pitcher 클래스에 주입한 Glove 클래스가 Equipment 인터페이스 타입과 같은지 확인하여 성공적으로 빈 등록과 주입을 했다는 것을 증명하겠다.
결과를 보면 Pitcher 클래스가 스프링 빈에 등록이 됐고, Glove 클래스도 주입이 잘 된 것을 알 수 있다.
근데 앞에서 설정 정보가 없어도 스프링 빈 등록을 자동으로 해준다고 했다.
이것을 설명하기에 앞서 우리가 맨 처음 프로젝트를 만들 때, 같이 생성된 @SpringBootApplication 어노테이션이 붙은 클래스를 찾아야 한다.
@SpringBootApplication 어노테이션을 까 보면 @ComponentScan 어노테이션이 있는 것을 확인할 수 있다.
그렇기 때문에 설정 정보가 담은 클래스가 아닌 @SpringBootApplication 어노테이션을 가진 클래스를 이용해서 ApplicationContext를 만들고 bean 등록한 객체를 가지고 와도 테스트를 아래와 같이 성공한다.
이전보다 확실히 시간은 더 걸렸지만 테스트는 이상 없이 성공했다.
이번 포스팅에서 스프링 빈에 올릴 클래스를 일일이 @Bean 어노테이션을 붙어서 빈 등록을 방법보다 간단한 방법에 대해 알아보았고 그 과정에서 스프링은 설정 정보가 없어도 자동으로 스프링 빈 등록을 해준다는 것을 알게 되었다.
'Spring > Spring' 카테고리의 다른 글
[Spring] 인터셉터(Interceptor)에 대해 알아보자! (0) | 2022.06.28 |
---|---|
[Spring] Filter에 대해 알아보자 ! (0) | 2022.06.24 |
[spring] Spring MVC 구조 (0) | 2022.06.02 |
[spring] 싱글톤 레지스트리 (0) | 2022.04.22 |
[spring] 스프링에서 DI를 하는 이유 (0) | 2022.04.21 |