💡 자바 코드로 직접 스프링 빈 등록하기
이전 시간에 등록했던 서비스,레포의 컴포넌트 스캔 대상 어노테이션(Autowired,Service,Repository)를 지워준다
멤버 컨트롤로에 있는 Autowired,Controller 어노테이션은 그대로 둔다
실무에서는 보통 정형화된 컨트롤러,서비스,레포 같은 코드는 컴포넌트 스캔을 사용함
- @Bean 어노테이션으로 빈에 MemberService 생성자 등록
- 동일하게 memberRepository도 생성자 등록
- memberService에서 memberRepository를 참조하도록 넣어줌

💡 Defendency Injection (의존성 주입)
DI의 3가지 방식
의존관계가 실행 중 동적으로 변하는 경우는 거의 없으니 생성자 주입을 추천함
- 필드 주입
- Setter 주입
- 생성자 주입
@Autowired를 통한 DI는 'helloController', 'MemberService' 와 같이 스프링이 관리하는 객체에서만 동작한다.
스프링 빈 등록이 아닌 내가 직접 생성한 객체에서는 동작 X
정형화 되어 있지 않거나 상황에 따라 구현클래스를 변경해야 할때, 설정을 통해 스프링 빈으로 등록
강의 초반, 레포를 임시로 구현체를 사용해 레포를 가상으로 설정하고 레포를 변경한다고 했는데,
기존 운영중인 코드를 100% 보존하면서 레포변경을 가능하게 할 수 있다
위에서 빈에 등록시킨 멤버레포 코드에 보면 리턴되는 객체 명만 바꿔주면 됨
즉, 스프링 빈에 등록이 안되어있으면 @Autowired 자체가 동작하지 않음


'Inflearn 강의 > Spring 입문' 카테고리의 다른 글
| 12 - (회원 조회 기능) (0) | 2022.10.10 |
|---|---|
| 11 - Web MVC (0) | 2022.10.08 |
| 9 - 컴포넌트 스캔 & 자동 의존관계 설정 (0) | 2022.10.06 |
| 8 - 서비스 개발 & 테스트 (0) | 2022.10.05 |
| 7 - 회원 레포 테스트 케이스 작성 (0) | 2022.10.05 |