[김영한님의 스프링 핵심 원리-기본편을 학습 후 정리한 내용입니다.]
지금까지의 강의에서는 빈을 등록하고, 의존관계를 주입할 때 @Bean 어노테이션을 붙여서 스프링컨테이너에 알려주었다. 하지만 예제가 아닌 실무에서는 등록해야 할 빈이 정말 많아지기 때문에, 설정정보가 없어도 스프링 빈을 등록하는 컴포넌트스캔이라는 기능을 사용한다.
@ComponentScan을 사용하면 어떻게 되나?
@ComponentScan을 붙이면 같은 패키지 내의 @Component가 명시된 클래스들을 자동으로 빈에 등록해준다. (@Configuration이 컴포넌트스캔의 대상이 된 이유도 소스코드에 @Component이 명시되어 있기 때문이다.) 게다가 이제는 아래 코드와 같이 우리가 사전에 정의했던 Appconfig설정정보를 사용하지 않기 때문에 같은 @Component클래스 내에서 @Autowired를 사용해서 의존관계 주입을 해결한다.
이제 이해하기 쉽게 그림으로 다시 정리해보자.
@ComponentScan은 기본적으로 @Component가 붙은 모든 클래스를 스프링 빈으로 등록한다. 빈 이름은 클래스명을 사용하지만 맨 앞글자만 소문자를 사용하는 것을 볼 수 있다. 이름을 정하고 싶다면 @Component("아무이름")이런식으로 정해주면 된다.
생성자에 @Autowired를 지정하면, 스프링 컨테이너가 자동으로 해당하는 스프링 빈을 찾아서 주입해준다. (생성자에 파라미터가 많아도 다 찾아서 주입해준다.)
컴포넌트 스캔 대상?
컴포넌트스캔은 @Component뿐만 아니라 다양한 annotation에 대해서 스캔 대상에 포함한다.
- @Component - 컴포넌트 스캔에서 사용
- @Controller - 스프링 MVC 컨트롤러에서 사용
- @Service - 스프링 비즈니스 로직에서 사용
- @Repository - 스프링 데이터 접근 계층에서 사용
- @Configuration - 스프링 설정 정보에서 사용
실제로, @Controller, @Service등이 붙어있는 클래스의 내부 소스코드를 보면 @Component가 붙어있는 것을 볼 수 있다.
'Frameworks > Springboot' 카테고리의 다른 글
[Springboot] HTTP요청, 응답 처리 방식 정리 (0) | 2022.08.24 |
---|---|
[Springboot] 의존관계 자동 주입 방법 정리 (0) | 2022.07.28 |
[Springboot] 싱글톤 컨테이너 개념 정리 (0) | 2022.07.24 |
[Springboot] 스프링 컨테이너 & 스프링 빈 개념 정리 (0) | 2022.07.23 |
[Springboot] 객체 지향 설계를 위한 AppConfig 구성 (0) | 2022.07.22 |
댓글