컴포넌트 스캔
컴포넌트 스캔을 사용하면 스프링 설정 정보가 없어도 자동으로 스프링 빈을 등록해준다.
스프링 빈을 등록하기 위해 <bean> 을 이용하여 직접 등록하지 않아도 됨
컴포넌트 스캔을 사용하려면 먼저 @ComponentScan 을 설정 정보에 붙여주면 된다.
컴포넌트 스캔을 사용하면 @Configuration이 붙은 설정 정보도 자동으로 등록 된다.
컴포넌트 스캔은 @Component 를 각 클래스에 붙여주면 된다.
@Autowired 를 사용하면 생성자에서 여러 의존관계도 한번에 주입받을 수 있다.
@ComponentScan은 @Component가 붙은 모든 클래스를 스프링 빈으로 등록한다.
@Autowired 를 지정하면 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아서 주입한다.
getBean(MemberRepository.class)와 동일하다고 보면 된다.
탐색 위치와 기본 스캔 대상
basePackages : 탐색할 패키지 시작 위치를 지정한다.
지정하지 않으면 @ComponentScan이 붙은 설정 정보 클래스의 패키지가 시작 위치가 된다.
※ 패키지 위치를 굳이 지정하지 않고 , 설정 정보 클래스의 위치를 프로젝트 최상단에 두는 것이 좋다.
※ 스프링 부트를 사용하면 스프링 부트의 대표 시작 정보인 @SpringBootApplication 를 프로젝트 시작 루트 위체이 두는 것이 관례이다.( 이 설정안에 @ComponentScan 이 들어있다!)
필터
inCludeFilters : 컴포넌트 스캔 대상을 추가로 지정한다.
exCludeFilters : 컴포넌트 스캔에서 제외할 대상을 지정한다.
중복 등록과 충돌
자동 빈 등록 vs 자동 빈 등록 => 컴포넌트 스캔에 의해 자동으로 스프링 빈이 등록되는데 그 이름이 같은 경우 스프링 오류 발생.
수동 빈 등록 vs 자동 빈 등록 => 수동 빈 등록이 우선권을 가진다.
=> 스프링 부트에서는 에러로 표시함(여러 설정들이 꼬여서 오히려 안좋은 결과 발생)
다양한 의존관계 주입 방법
생성자 주입
수정자 주입
필드 주입
일반 메서드 주입
생성자 주입
생성자를 통해서 의존 관계를 주입 받는 방법이다.
생성자가 1개 있으면 @Autowired를 생략해도 자동 주입 된다.
필드주입
이름 그대로 필드에 바로 주입하는 방법이다.
코드가 간결 해서 과거에는 많이 썼지만 지금은 쓰지 않는다.
외부에서 변경이 불가능해서 테스트를 하기가 어렵다. => 치명적인 단점
(전에 일하던 회사에서 항상 필드 주입을 썼는데 충격..)
'SPRING' 카테고리의 다른 글
김영한 SPRING 기본편 6일차 (0) | 2021.12.13 |
---|---|
김영한 SPRING 기본편 5일차 (0) | 2021.12.13 |
김영한 SPRING 기본편 3일차 (0) | 2021.12.09 |
김영한 SPRING 기본편 2일차 (0) | 2021.12.08 |
김영한 SPRING 기본편 1일차 (0) | 2021.12.08 |