개발/spring1

15강(자바 코드로 직접 스프링 빈 등록하기)

LoafingCat 2022. 11. 21. 01:53

@Service, @Repository, @AutoWired 어노테이션을 제거하고 시작함

 

수작업으로 얘네를 등록시켜주는 것임

 

 

요렇게 만들어주면 스프링이 컨피규레이션을 읽고 이건 스프링 빈에 등록하라는 뜻이네? 인식하고 스프링 빈에 등록을 해준다.

 

멤버 서비스는 멤버 리포지토리를 엮어주면 되니까 return new MemberService 멤버 리포지토리를 넣어주면 된다.

그럼 AutoWired 했던거 처럼 연결이 된다.

 

컨트롤러는 어쩔 없음. 스프링이 어차피 관리하는 거기 때문에 @AutoWired 해서 멤버 서비스를 넣어줌.

 

편하기는 @Service 압도적으로 편한데 각각 장단점이 있음.

 

DI(디펜던시 인젝션)에는 필드주입, setter 주입, 생성자 주입 3가지 방법이 있는데 의존관계가 실행중에 동적으로 변하는 경우는 거의 없으므로 생성자 주입을 권장한다.

 

실무에서는 주로 정형화된 컨트롤러, 서비스, 리포지토리 같은 코드는 컴포넌트 스캔을 사용한다. 그리고 정형화 되지 않거나, 상황에 따라 구현 클래스를 변경해야 하면 설정을 통해 스프링 빈으로 등록한다.

 

프로젝트를 시작하기 전에 아직 데이터 저장소가 선정되지 않았다는 가상의 시나리오가 있었다. 그래서 일단 메모리로 만들고 나중에 교체하자고 했음. 그래서 지금 인터페이스를 설계하고 구현체로 메모리 멤버 리포지토리를 쓰는 상황인거임.

 

근데 나중에 다른 리포지토리로 바꿔치기 할거임, 할건데, 기존에 운영중인 코드를 하나도 손대지 않고 바꿔칠 있는 방법이 있다. 그걸 하기 위해 지금 공부를 하는 것임. ("상황에 따라 구현 클래스를 변경해야 하면 설정을 통해 스프링 빈으로 등록한다" 라는 상황을 만들거란 말임)

 

 

나중에 메모리 멤버 리포지토리를 메모리 지우고 Db만 입력해주면 됨. 정말 간단하다. 직접 설정 파일을 운영할 때의 장점.