본문 바로가기

게으른개발자/공부

DI(Dependency injection) 의존성 주입

의존성(Dependency)란?

  • 어떤 클래스가 자신의 임무를 다하기 위해 필요한 값(필드값)이나 사용할 다른 클래스와의 관계
  • 예를들어, Car클래스가 있고 필드로 Tire 클래스에 대한 인스턴스 참조를 가지고 있으면,  "Car 클래스가 Tire 클래스에 의존하고있다"라고 한다.

1
2
3
4
5
6
7
8
9
10
11
public class Car {
    private Tire tire;
 
    public Car(Tire tire) {
        this.tire = tire;
    }
 
    public void setTire(Tire tire) {
        this.tire = tire;
    }    
}
cs





의존성 주입 방법

  • 스프링 설정 파일을 통한 의존성 주입


생성자를 통한 주입

- 생성자 주입은 <bean> 요소의 자식 요소로 <constructor-arg> 요소를 사용.

1
2
3
4
5
<bean id="tireBean" class="sample.Tire"></bean>
 
<bean id="carBean" class"sample.Car">
    <constructor-arg ref="tireBean"></constructor-arg>
</bean>
cs


설정 메서드를 통한 주입

- 설정 메서드 주입은 <bean> 요소의 자식 요소로 <property> 요소를 사용.

1
2
3
4
5
<bean id="tireBean" class="sample.Tire"></bean>
 
<bean id="carBean" class"sample.Car">
    <property name="tire" ref="tireBean"></property >
</bean>
cs


  • 어노테이션을 이용한 의존성 주입
1
2
3
4
5
6
7
8
9
10
11
12
13
@Configuration
public class BeanConfig {
    
    @Bean
    public Tire tireBean(){
        return new Tire();
    }
 
    @Bean
    public Car carBean() {
        return new Car();
    }
}
cs