본문 바로가기

[Spring] DI(Dependency Injection) 의존관계 주입

131ZIPDAN 발행일 : 2017-08-03
반응형

DI(Dependency Injection) 의존관계 주입

- Iterface 기반을 통해 적용.

- 스프링의 경우 객체의 의존성을 xml에서 설정 가능하기 때문에 컨테이너가 Bean 팩토리 역할로

  설정파일에서만 필요한 설정을 적용하면 기존코드를 변경 없이 Dependency의 값을 사용할 수 있다.

- 코드 변경 없이 xml의 설정만으로 개발자가 원하는 개체의 주입으로 바꿀 수 있다.

 

의존성 주입 예제

InjectionInterface.java

1
2
3
4
5
6
package jin.injection;
 
public interface InjectionInterface {
void printMessage();
}
 
cs

 

InjectionImplement.java

1
2
3
4
5
6
7
8
9
10
11
12
package jin.injection;
 
public class InjectionImplement implements InjectionInterface{
 
    @Override
    public void printMessage() {
        System.out.println("printMessage() 메서드를 출력한다.");
        
    }
 
}
 
cs

 

bean.xml

1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="jin.injection.InjectionImplement" id="injectionimplement"></bean>
 
</beans>
 
cs

InjectionObjectCall.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package jin.injection;
 
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
 
public class InjectionObjectCall {
public static void main(String[] args) {
    ApplicationContext context = new FileSystemXmlApplicationContext("src/main/resources/bean.xml");
    InjectionInterface injectionInterface = (InjectionInterface) context.getBean("injectionimplement");
    injectionInterface.printMessage();    
    
//  기존 생성자를 이용한 
//    InjectionInterface injectionInterface2 = new InjectionImplement();
//    injectionInterface2.printMessage();
}
}
 
cs

 

실행 값

 

 

 

기본 생성자 접근을 통한 생성

BasisConstructor.java 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package jin.a.injection;
 
 
public class BasisConstructor {
 
    private static BasisConstructor basisConstructor; 
    public static BasisConstructor getInstance() {
        if (basisConstructor == null) {
            basisConstructor = new BasisConstructor();
        }
        return basisConstructor;        
    }
    private BasisConstructor() {
        System.out.println("생성자 호출");
    }
    public void getMessage() {
        System.out.println("getMessage() 메서드 호출");
        
    }
 
}
cs

 

BasisConstructorCall.java 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package jin.a.injection;
 
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
public class BasisConstructorCall {
public static void main(String[] args) {
    ApplicationContext context = new ClassPathXmlApplicationContext("bean2.xml");
    BasisConstructor basisConstructor = (BasisConstructor) context.getBean("basisconstructor");
    basisConstructor.getMessage();
    
//    BasisConstructor basisConstructor2 = null;
//    basisConstructor2 = BasisConstructor.getInstance();
//    basisConstructor2.getMessage();
    
    
    
}
}
 
cs

 

bean2.xml

1
2
3
4
5
6
7
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="jin.a.injection.BasisConstructor" id="basisconstructor" ></bean>
 
</beans>
cs

실행값

 

 

반응형

댓글