기존에 Component Scan 방식이 아닌 직접 자바 코드를 이용해서 Bean 에 등록할 것이기 때문에, Controller를 제외한 @Service, @Repository, @Autowired 를 제거한다.
SpringConfig
- Main method Scope 에 SpringConfig class 를 생성하고, 다음과 같이 작성한다.
- Spring 이 @Configuration 으로 인식하면, @Bean annotation으로 등록한 MemberService 와 MemberRepository 를 Bean 으로 등록한다.
- MemberService 에서 MemberRepository 가 Bean 으로 등록되어 있는지 Spring container 내에서 객체를 찾고, 위에서 @Bean 으로 등록했기 때문에 의존성을 주입한다.
- Controller 는 따로 설정하기 어려워서 Bean 으로 따로 등록하지 않음. 마찬가지로 MemberService 가 Bean으로 등록되어 있으니 기존 Component Scan 방식으로 의존성을 주입한다.
의존성 주입(DI ; Dependency Injection)의 3가지 방법
- 생성자 주입
- 필드 주입
- setter 주입
1번은 우리가 이미 알아본 방법 이므로 2번부터 설명한다.
2. 필드 주입(권장되지 않음)
- 직접 import 된 class 타입의 변수에 주입하는 방법
- 생성자 주입 방법과 달리, 주입 시 바꿀 수 있는 방법이 없으므로 권장되지 않는다.
3. setter 주입(권장되지 않음)
- setter method 의 scope 가 public 해야하므로, code 가 노출되어 마찬가지로 권장되지 않는다.
- 즉, 누구나 호출할 수 있는 단점이 존재
- 보통 어플리케이션 로딩하고 조립할 때 바꾸지, 어플리케이션이 한번 세팅되면 바꿀일이 잘 없다.
***그렇다면 왜 Bean 을 등록하는 방법을 2가지를 알아야할까?
: 상황에 따라 구현 class 를 변경해야하는 경우 때문
- 우리는 이전에 DB를 Memory 방식으로 설정하고, 나중에 DB를 만들기로 했다.
- 즉, 기존의 MemoryMemberRepository의 의존성에 종속되지 않고 Configuration 만 변경해서 의존관계를 재설정하기 위해, @Configuration 과 @Bean 으로 Spring Bean 에 등록하는 방법을 알아야할 필요성이 있었던 것이다.
- 따라서 Component Scan 방식은 정형화된 방식, Configuration Bean 등록 방식은 의존성 주입에 필요한 클래스 변경 시 사용된다.
- 더 나아가기
https://upcake.tistory.com/417
[Spring] @Autowired 대신 @RequiredArgsConstructor
1. 개요 의존성 주입이란 것을 할 때 @Autowired 대신 생성자 주입을 활용하면 좋다고 합니다. 저도 공부 중이라 스프링 IoC, 빈, 의존성 같은 개념들은 잘 모르지만 일단 바로 적용할 수 있는 생성자
upcake.tistory.com
@Autowired 는 필드주입이므로, @RequiredArgsConstructor 를 활용하자.
'Java > 스프링 입문 - 스프링 부트, 웹 MVC, DB 접근 기술' 카테고리의 다른 글
[Spring DB 접근 기술 - (1)] JDBC, JPA와 h2 Database 설치 (0) | 2022.07.05 |
---|---|
[회원 관리 예제 : 웹 MVC 개발] 홈, 회원 등록, 회원 조회 (0) | 2022.07.01 |
[Spring Bean과 의존관계 - (1)] Component Scan 과 자동 의존관계 설정 (0) | 2022.07.01 |
[회원 관리 예제, 백엔드 개발 - (5)] 회원 서비스 테스트 (0) | 2022.06.30 |
[회원 관리 예제, 백엔드 개발 - (4)] 회원 서비스 개발 (0) | 2022.06.30 |