티스토리 뷰

SPRING

컴포넌트 스캔

짜비 2021. 5. 16. 20:13

class를 수동으로 Spring Bean에 등록하는 방법은 다음과 같다.

번거롭고, Bean에 등록하는 코드를 따로 작성하다보니 빼먹을 가능성이 있다.

 

이를 해결하기 위해 spring bean 등록을 더 쉽게 할 수 있는 방법이 있다.

 

Component Scan

우선 config 파일에 @ComponentScan을 붙인다.

 

그리고 등록하고 싶은 class에 @Component를 붙인다. 이렇게 하면 spring이 spring container에 알아서 bean 등록을 해준다.

 

 

그런데...

bean을 등록하는 건 알겠는데, 그러면 의존관계는 어떻게 주입할까? 수동으로 bean을 등록할 때는 의존관계를 프로그래머가 선택해서 넣어줄 수 있었는데...

@Autowired 를 이용하면 된다!

생성자 코드에 @Autowired를 붙이면 스프링이 spring container에서 주입할 class과 type이 맞는 녀석을 찾아서 자동으로 주입해준다.

 

그림으로 보면 다음과 같다.

@Component가 붙어있는 애들이 먼저 spring container에 등록 되고, @Autowired를 만나면 bean에 있는 클래스를 보면서 type이 일치하는 애를 찾는다. 위 예시에서는 memoryMemberRepository의 type이 parameter에 있는 MemberRepository와 일치한다. 따라서 이 녀석을 데려다가 MemberServiceImpl에 주입한다.

 


컴포넌트 스캔 탐색 위치

@ComponentScan에 parameter로 basePackages를 지정하면 해당 패키지 내에 있는 컴포넌트만 spring bean에 등록한다.

이 때, basePackages를 지정하지 않는다면, 설정정보 class가 있는 package 안에 있는 컴포넌트가 등록 대상이 된다!

-> 따라서 @ComponentScan이 붙어 있는 파일을 프로젝트 최상단에 위치시키는 것이 관례. 

 

한편, spring boot를 처음 열면 기본으로 제공되는 Application file에 @SpringBootApplication이 붙어 있는 것을 알 수 있다.

이 @SpringBootApplication 내에 @ComponentScan이 붙어 있다. 이 덕분에 프로그래머가 @ComponentScan을 붙이지 않아도 component scan이 잘 이루어졌던 것.

 

 

컴포넌트 스캔 기본 대상

@Service, @Controller, @Repository, @Configuration 도 내부를 살펴보면

@Component를 포함하고 있다. 그렇기 때문에 이런 클래스들이 spring bean에 등록될 수 있는 것이다!

 

 

사진, 내용 출처 : 인프런, 김영한 강사님의 '스프링 핵심 원리 - 기본편' 강좌, 강의자료

https://inf.run/TErf

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함