티스토리 뷰
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에 등록될 수 있는 것이다!
사진, 내용 출처 : 인프런, 김영한 강사님의 '스프링 핵심 원리 - 기본편' 강좌, 강의자료
'SPRING' 카테고리의 다른 글
의존관계 주입 시 스프링 빈이 2개 이상 조회될 때 (feat. @Qualifier, @Primary) (0) | 2021.05.18 |
---|---|
의존관계 주입 방법 (0) | 2021.05.17 |
EC2에서 SPRING APPLICATION이 돌아가지 않을 때 (FEAT. SWAP MEMORY) (0) | 2021.04.04 |
싱글톤 컨테이너 (2) 원리 (0) | 2021.01.21 |
싱글톤 컨테이너 (1) 등장배경, 정의, 주의사항 (0) | 2021.01.21 |
- Total
- Today
- Yesterday
- 프록시
- gracefulshutdown
- java
- 자바스터디
- 토비
- 데코레이터패턴
- SOLID
- 코테
- OOP
- 객체지향
- 토비의봄TV
- ec2
- BOJ
- 코딩테스트
- 김영한
- 스프링
- 백기선
- 디자인패턴
- provider
- 토비의스프링
- 예외처리
- 메서드레퍼런스
- 프로그래머스
- 자바
- AOP
- c++
- 프록시패턴
- 카카오
- 템플릿콜백
- 서비스추상화
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |