IoC는 다양한 방법으로 만들 수 있다.
전략 패턴, 서비스 로케이터 패턴, 팩토리 패턴, 의존관계 주입 패턴들이 있다.
지금까지 쓴 생성자를 통해서 객체를 주입받는 패턴을 생성자 주입 패턴(DI)이라고 부른다.
스프링은 생성자 주입을 권장한다.
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-setter-injection
의존성 주입 과정은 다음과 같다.
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-dependency-resolution
현재 Config 파일은 다음과 같다.
@Configuration
public class AppConfiguration {
@Bean
public VoucherRepository voucherRepository() {
return new VoucherRepository() {
@Override
public Optional<Voucher> findById(UUID voucherId) {
return Optional.empty();
}
};
}
@Bean
public OrderRepository orderRepository() {
return new OrderRepository() {
@Override
public void insert(Order order) {
}
};
}
@Bean
public VoucherService voucherService() {
return new VoucherService(voucherRepository());
}
@Bean
public OrderService orderService() {
return new OrderService(voucherService(), orderRepository());
}
}
이를 생성자 주입으로 다음과 같이 바꿀 수 있다.
@Bean
public VoucherService voucherService(VoucherRepository voucherRepository) {
return new VoucherService(voucherRepository);
}
@Bean
public OrderService orderService(VoucherService voucherService, OrderRepository orderRepository) {
return new OrderService(voucherService, orderRepository);
}
https://github.com/yanJuicy/kdt-spring-order/tree/c793db236e3885512222b7446cc26e002ba9b8b5