
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