[스프링 빈을 대신 생성해주는 경우]
XML파일이나 @Bean을 이용해서 등록하지 않아도 등록되는 경우가 있다.
->우리가 그냥 쓰는 @Repository, @Service, @Controller들도 Bean에 등록해야 사용 가능하지만 따로 @Bean으로 등록한 적은 없을 것이다.
@ComponentScan과 @Component의 역할은 아래와 같다.
1. ComponentScan : 선언한 위치 (패키지, 프로젝트 범위 등등 지정한 만큼 가능)에 있는 @Component (스테레오 타입 애노테이션)을 모두 검색하여 빈으로 등록한다.
2. 빈에 등록되면 위에서 말했던 것처럼 싱글톤이 보장되며 언제든지 불러올 수 있다.
※ 스프링 부트에서는 시스템 전체가 @SpringBootApplication 애노테이션 기반으로 동작을 시작하는데 해당 애노테이션은 ComponentScan을 상속받고 있어서 별도의 Component-Scan을 등록하지 않아도 기본적으로 ComponentScan이 등록되어있다.
@Component를 상속받고 있는 애노테이션 4인방을 알아보자
[@Repository , @Service , @Controller , @Configuration]
위 4개의 애노테이션은 @Coponent 애노테이션을 상속받고 있다. 그렇기에 아래 사진과 같이 그대로 선언만 해도 CompoenetScan을 이용하여 Component를 상속받고 있는 애노테이션인 @Repository만을 사용하더라도 별도의 Bean등록없이 사용 가능한 이유중 하나이다
그럼 또 다시 궁금한 점이 생길 수 있다.
위 4개는 Coponent를 상속하고 있어서 자동으로 bean으로 등록되는 것 외에 다른 기능은 없는가?
@controller : MVC 컨트롤러로 인지
@Configuration : 스프링 설정 정보처리, 빈이 싱글톤 처리함
@Service , @Repository : 기능의 차이는 없으나 인식을 위해 구분해두었음