작성
·
278
·
수정됨
0
@Component 애노테이션을 사용하여 스프링 빈에 자동으로 클래스를 등록하고, 각 스프링 빈 간의 의존관계를 주입하는 방법에 대해 이해했습니다.
의존관계 주입의 목적이, SOLID원칙에서 특히 DIP원칙을 위반하지 않기 위함이라고 생각됩니다. 추상화에 의존하고, 클라이언트 코드의 변경을 줄이기 위함입니다.
그렇다면 실제 런타임에서 인스턴스(구현체)간의 의존 관계를 주입해주는 로직은 AppConfig에서 진행되는 건가요?
@Configuration
public class AppConfig {
@Bean
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
@Bean
public OrderService orderService() {
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
@Bean
public DiscountPolicy discountPolicy() {
return new FixDiscountPolicy();
}
}
위 코드는 기존에 사용하던 AppConfig클래스입니다. 여기서는 @Bean을 사용하여 수동으로 빈 등록을 해주므로 충돌이 존재할 것이라 무언가 수정이 필요하다고 생각되고 @Bean만 제거한 코드를 사용하면 되나요?
생성자 주입을 통해 DI를 하는 것은 이해가 되었으나, AppConfig처럼 하나의 파일에서 런타임에 사용 될 의존관계를 정하는 코드가 궁금합니다