1. Component Scanning을 통한 의존관계 자동 주입

- @ComponentScan 애노테이션이 붙어 있는 클래스가 있는 패키지에서부터 모든 하위 패키지의 모든 클래스를 탐색하여, @Component 애노테이션이 붙은 클래스를 스캔하고 이를 스프링 빈으로 등록한다.

- 참고로 @SpringBootApplication 애노테이션 내부에도 @ComponentScan 애노테이션이 존재한다.

컴포넌트 스캔 기본 대상 - @Controller: 스프링 MVC 컨트롤러에서 사용된다.
- @Service: 스프링 비즈니스 로직에서 사용된다.
- @Repository: 스프링 데이터 접근 계층에서 사용된다.
- @Configuration: 스프링 설정 정보에서 사용된다.
- @Component: 컴포넌트 스캔에서 사용된다. 위의 애노테이션은 모두 @Component 애노테이션을 갖고 있다.

 

2. 빈 설정 파일에 직접 스프링 빈 등록

- 빈 설정 파일은 XML 혹은 Java 설정 파일로 작성이 가능하다.

- Java 설정 파일은 Java 클래스를 통해 작성이 가능하며, 일반적으로 OOOConfiguration이라고 이름을 짓는다. 클래스에 @Configuration 애노테이션을 붙이고, @Bean 애노테이션을 통해 직접 빈을 등록할 수 있다.

- @Configuration 애노테이션 안에는 @Component 애노테이션이 포함되어 있기 때문에, @ComponentScan 애노테이션의 스캔 대상이 된다.

@Configuration
public class TestConfiguration {
	@Bean
	public TestController testController() {
		return new firstTestController();
	}
}

 

3. 정형화된 Controller, Service, Repository 같은 코드들은 Component Scanning을 사용한다. 그러나 정형화되지 않고, 상황에 따라 구현 클래스를 변경해야 하면 빈 설정 파일에 직접 스프링 빈을 등록하는 방법을 사용한다.

 

참고

- https://atoz-develop.tistory.com/entry/Spring-%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B9%88Bean%EC%9D%98-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%83%9D%EC%84%B1-%EC%9B%90%EB%A6%AC

- 『스프링 핵심 원리 - 기본편』