[14강]

2023. 2. 3. 01:38Spring 강의/section4

자바 코드로 직접 스프링 빈 등록하기

- 직접 설정파일에 등록하기

 

먼저 MemberService와 MemoryMemberRepository에 있던 @Service, @Repository, @Autowired 어노테이션을 지워준다.

 

그리고 SpringConfig 클래스 추가

SpringConfig.class

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package hello.hellospring2;
 
import hello.hellospring2.repository.MemberRepository;
import hello.hellospring2.repository.MemoryMemberRepository;
import hello.hellospring2.service.MemberService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
@Configuration 
public class SpringConfig {
 
    @Bean
    public MemberService memberService(){
        return new MemberService(memberRepository());
    }
 
    @Bean
    public MemberRepository memberRepository(){
        return new MemoryMemberRepository();
    }
}
cs

1. 스프링이 뜰 때 @Configuration 읽음.

2. @Bean을 보고 인식해서 memberService()와 memberRepository()를 스프링 빈에 등록
3. 스프링 빈으로 등록되어 있는 memberRepository를 MemberService에 넣어준다.

 

MemberController.class

컨트롤러 코드는 어쩔 수 없음. 그냥 둔다.

 

실행시켜보면 잘 돌아간다.

 

현재 이 그림까지 완성

DI의 3가지 방법

1. 생성자 주입

생성자를 통해 memberService가 MemberController에 주입된다.

 

2. 필드 주입

이렇게 필드 주입으로 등록되면 수정이 어려워서 별로 권장 안 한다.

 

3. Setter 주입

누군가가 MemberController를 호출했을 때 setMemberService가 public으로 되어 있어야한다.

한 번 세팅하면 거의 바꿀 일이 없는데 누군가 바꿔치기하기 쉽게 public으로 열려 있고

아무나 호출할 수 있다는 단점이 있다.

 

그래서 요즘 권장하는 스타일은 생성자 주입이라는 것!

 

참고 : 실무에서는 주로 정형화된 컨트롤러, 서비스, 리포지토리 같은 코드는 컴포넌트 스캔을 사용한다.

          그리고 정형화 되지 않거나, 상황에 따라 구현 클래스를 변경해야 하면 설정을 통해 스프링 빈으로 등록한다.

 

 

 

'Spring 강의 > section4' 카테고리의 다른 글

[13강]  (0) 2023.02.02