2-5) Dependency Injection

Hyoin Jeong·2022년 7월 19일
0

IoC를 구현하는 패턴이라고 볼 수 있음

IoC는 다양한 방법으로 만들 수 있음 → 전략 패턴, 서비스 로케이터 패턴, 팩토리 패턴, 의존관계 주입패턴

지금까지 우리가 Order가 어떠한 Voucher 객체를 생성할지 OrderService가 어떤 OrderRepository 객체 생성할지 스스로 결정하지 않고 생성자를 통해서 객체를 주입받는 패턴

→ 생성자 주입 패턴(Dependency Injection)

그 외에도 스프링은 세터 기반의 의존관계 주입도 지원하지만 생성자 주입 패턴을 추천

Circular dependencies(Bean을 잘못 등록)

A → B를 참조하고 B → A를 참조할경우 순환 의존관계가 형성되면서 BeanCurrentlyInCreationException 예외가 발생할 수 있음

class A{
    private final B b;

    A(B b) {
        this.b = b;
    }
}

class B{
    private final A a;

    B(A a) {
        this.a = a;
    }
}

@Configuration
class CircularConfig{
    @Bean
    public A a(B b){
        return new A(b);
    }

    @Bean
    public B b(A a){
        return new B(a);
    }
}

public class CircularDepTester {
    public static void main(String[] args) {
        var annotationConfigApplicationContext=new AnnotationConfigApplicationContext(CircularConfig.class);
    }
}

0개의 댓글