2022. 10. 26. 15:35ㆍSpring
해당 내용은 김영한님의 인프런_[스프링 핵심 원리]를 기본으로 합니다.
@ComponentScan
스프링은 @Configuration과 @Bean으로 빈등록을 하는 방법도 있지만 자동으로 스프링 빈을 등록해주는 컴포넌트 스캔 기능을 제공한다. 이름 그대로
@ComponentScan을 붙여주면 패키지를 탐색하여 @Component 애노테이션이 붙은 클래스를 스캔해서 스프링 빈으로 등록해준다.
@ComponentScan(
basePackages = "hello.core",
basePackageClasses = "AutoAppConfig.class"
)
- @ComponentScan 은 @Component 가 붙은 모든 클래스를 스프링 빈으로 등록한다.
- @Component는 컴포넌트 스캔에서 사용되는 애노테이션이다.
- basePackages : 탐색할 패키지의 시작 위치를 정한다. 해당 패키지를 포함하여 하위 패키지 모두 탐색한다.
- basePackageClasses : 지정한 클래스의 패키지를 탐색 시작 위치로 지정한다.
- 단순히 @ComponentScan만 쓴다면 @ComponentScan이 붙은 설정정보 클래스의 패키지가 탐색 시작 위치가 된다.
- 이 때 스프링 빈의 기본 이름은 맨 앞글자만 소문자로 된 클래스 명을 사용한다.
- 빈 이름을 직접 지정할 수도 있다. @Component("otherNme")
패키지를 지정하지 않고 @ComponentScan만 쓰는것이 기본적이기 때문에, 설정 정보 클래스의 위치는 프로젝트 최상단에 두는 것이 좋다.
해당 AutoAppConfig 코드를 보면 @Bean을 사용한 빈 등록도 없고 의존 관계 주입해주는 코드도 없지만
싱글톤 빈이 생성된것을 확인할 수 있다.
@ComponentScan을 붙인 클래스의 패키지가 hello.core이고 그 밑으로 들어가있는 클래스들중에 @Component가 붙은 클래스를 스프링 빈으로 등록했기 때문이다.
클래스에
@Controlller, @Service, @Repository, @Configuration
를 붙여주면 스프링 빈 등록이 됐는데 그 이유는 저 애노테이션 안으로 들어가보면 @Component애노테이션이 들어있기 때문이다.
@Autowired_의존관계 자동 주입
@ComponentScan을 통해 빈등록을 해주고나면 의존관계를 명시해줄 코드가 없다. 이를 위해
자동으로 의존 관계를 주입해주기 위해서 @Autowired를 사용한다.
생성자에 @AutoWired를 붙여주면 스프링 컨테이너에 등록된 빈들중에 타입이 같은 빈을 찾아서 주입해준다.
자동 의존관계 주입에 대한 내용은 다음에 정리하고 첨부하겠다.
'Spring' 카테고리의 다른 글
의존 주입할 빈이 두개 이상 조회 될 때 (0) | 2022.10.26 |
---|---|
의존관계 자동 주입 방법 (0) | 2022.10.26 |
Configuration과 싱글톤 (0) | 2022.10.26 |
BeanDefinition - 스프링 빈 설정 메타 정보 (0) | 2022.10.26 |
BeanFactory와 ApplicationContext (0) | 2022.10.26 |