** 공유가 아닌 개인 공부에 목적을 둔 글입니다
** 설명이 불충분할 수 있으며 잘 정리된 글이 아닐 수도 있습니다
@Bean 이나 XML 의 <bean> 을 통해 빈을 등록하는 방법도 있지만, 등록해야 할 빈이 많아지면 실수하기 마련이다
스프링은 이를 위해 자동으로 스프링 빈을 등록하는 @ComponentScan 과 의존관계를 자동으로 주입하는 @Autowired
어노테이션을 제공한다
1. 설정정보 클래스(Config.class) 에 @Configuration 과 더불어 @ComponentScan 을 붙인다
(@ComponentScan 을 사용하면 @Configuration 이 붙은 다른 설정정보들도 자동으로 등록되기 때문에
이를 제외하고 싶다면 excludeFilters 를 이용해 제외하면 된다
반대로 다른 클래스를 포함하고 싶다면 includeFilters 를 사용하면 된다)
2. @Component 가 붙은 클래스들을 스캔해 스프링 빈으로 등록한다
3. 클래스 내 생성자에 @Autowired 로 의존관계를 주입한다
@Component 을 통해 자동 등록된 빈의 기본 이름은 클래스명을 사용하되 소문자로 시작한다
예를들어 OrderServiceImpl -> orderServiceImpl 이 된다
@Component("xx") 이렇게 직접 이름을 지정할 수도 있지만 디폴트이름이 가장 좋다
@Autowired 를 통해 스프링 컨테이너가 스프링 빈을 찾아내서 주입해주는데,
이때 빈은 타입으로 조회해서 찾아낸다
@ComponentScan 은 설정정보 클래스의 위치를 기준으로 그 하단의 클래스들을 탐색하기 때문에
주로 설정정보 클래스를 최상단에 두는데, (예전에 설정정보를 아무데나 두어서 오류 원인을 찾는데 애먹었던 기억..)
@ComponentScan ( basePackages = "패키지 주소") 를 통해 탐색 시작 위치를 지정하는 방법도 있다
한편, 컴포넌트 스캔 대상은 @Component 뿐만 아니라
@Controller, @Service, @Repository, @Configuration 이 있는데 이는 스프링이 지원하는 기능이다
** 스프링 부트를 사용할 때는 스프링 부트의 시작 정보인 @SpringBootApplication 를
프로젝트 시작 루트 위치에 두는 것이 관례인데,
이 설정안에 바로 @ComponentScan 이 들어있기 때문이다
'Spring' 카테고리의 다른 글
[Spring] @Qualifier, @Primary (0) | 2021.12.07 |
---|---|
[Spring] @Autowired 의존관계 주입시 조회되는 빈이 여러개일때 (0) | 2021.11.29 |
[Spring] 싱글톤 컨테이너와 @Configuration (0) | 2021.11.28 |
[Spring] @Configuration, @Bean 이해하기 (0) | 2021.11.26 |
[Spring] DI : Dependency Injection (0) | 2021.08.28 |