// 생성자 주입
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
@Controller
public class MemberController {
private MemberService memberService;
// setter 주입
@Autowired
public void setMemberService(MemberService memberService) {
this.memberService = memberService;
}
}
@Controller
public class MemberController {
// 필드 주입
@Autowired private final MemberService memberService;
}
appConfig 객체는 memoryMemberRepository 객체를 생성하고
그 참조값을 memberServiceImpl을 생성하면서 생성자로 전달
클라이언트인 memberServiceImpl 입장에서 보면 의존관계를 마치
외부에서 주입해주는 것 같다고 해서 DI(Dependency Injection) 우리말로 의존관계 주입 또는 의존성 주입이라 한다
public class AppConfig {
// 이전에는 MemberServiceImpl가 private final MemberRepository memberRepository = new MemoryMemberRepository(); 와 같이
// 직접 new MemoryMemberRepository()를 할당 했었다
public MemberService memberService() {
return new MemberServiceImpl(new MemoryMemberRepository()); // 성성자 주입
}
public OrderService orderService() {
return new OrderServiceImpl(new MemoryMemberRepository(), new FixDiscountPolicy());
}
}
[출처]스프링 핵심원리 이해2-객체지향원리적용 - 인프런 김영한