Exam exam = new NewLecExam();
ExamConsole console = new InlineExamConsole(exam); // DI
ExamConsole console = new GridExamConsole(exam); // DI
console.setExam(exam);
이렇게 인터페이스 사용해서 상속받고 객체 조립하면 DI 임.
근데 이렇게 하면 결국 코드를 직접 수정하는 것과 똑같음.
그래서 생성한 인스턴스를 외부(XML)에 별도로 저장해서 필요한 상황에 적절하게 갈아끼움.
=> Spring을 이용하면 코드수정 없이 DI를 간편하게 할 수 있다 !
bean id
: 사용할 instance 명
bean class
: 생성할 class 명. 중복될 수 있으므로 앞에 패키지 경로를 함께 적어줌.
property
: class 내의 함수
property name
: 함수명. 정해진 규칙 하에 setExam을 exam이라고 씀.
property value or ref
: 인자값의 종류에 따라 value인지 ref인지 결정. exam은 객체이므로 ref.
// setting.xml
<?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">
//Exam exam = new NewLecExam();
<bean id="exam" class="spring.di.entity.NewLecExam" />
// ExamConsole console = new GridExamConsole(exam);
<bean id="console" class="spring.di.ui.GridExamConsole" >
// console.setExam(exam);
<property name="exam" ref="exam"></property>
</bean>