이전 게시물에서 스프링 빈을 등록하는 방법에는 두 가지가 있다고 하였습니다.
오늘은 그 중 두 번째 방법인 자바 코드로 직접 스프링 빈을 등록하는 방법을 살펴보겠습니다.
먼저 MemberService에서 @Service 어노테이션과 @Autowired 어노테이션을 삭제하고, MemberRepository에서는 @Repository 어노테이션을 삭제합니다.
자바 코드로 직접 스프링 빈을 등록하는 방법은 @Service와 @Repository에 해당되고 @Controller는 컴포넌트 스캔으로 설정이 됩니다. 즉, Controller는 @Autowired로 MemberService를 주입받는 것입니다.
< SpringConfig >
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService() {
return new MemberService(memberRepository()); // 스프링 빈으로 등록된 memberRepository 넣어줌
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository(); // 구현체를 new 해야함. MemberRepository는 인터페이스라서 new 불가능
}
}
DI(의존성 주입)에는 생성자 주입, 필드 주입, Setter 주입 이렇게 3가지 방법이 있습니다. 주로 생성자 주입을 권장하며 이 게시글의 코드들 또한 생성자 주입을 사용합니다.
@Autowired private MemberService memberService;
@Autowired
public void setMemberService(MemberService memberService) {
this.memberService = memberService;
}
Setter 주입 방식은 MemberService가 pubilc 이여서 공개가 되므로 좋지 않은 방법입니다.