package model;
public class SportsCar implements Car {
public void go(){
System.out.println("SportsCar go..");
}
}
package model;
public class Truck implements Car{
public void go(){
System.out.println("Truck go...");
}
}
package model;
public class TestOld {
public static void main(String[] args) {
// Truck 객체 생성하고 go()를 호출
/*Truck t = new Truck();
t.go();*/
// SportsCar로 변경 --> 소스 코드가 변경되어야 한다.
/*SportsCar s=new SportsCar();
s.go();*/
//SportsCar s=new SportsCar(); --> interface로 표준화
Car c=new SportsCar();
c.go();
}
}
package test;
import model.Car;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
public class TestDI {
/**
* Spring DI(Dependency Injection) 적용 예제
* why? 결합도를 낮추기 위해 DI 를 적용
* -> 유지 보수성과 테스트의 용이성
* how? spring container를 이용해 객체 생성
* 구체적 객체 생성 여부는 spring 설정파일에 명시
* ---> 객체기 변경되더라도 소스 코드 수정은 없다.(결합도가 낮다.)
* ---> 다양한 객체에 대한 테스트 수행 또한 소스코드 수정없이 가능하다.
*/
public static void main(String[] args) {
// spring di
// spring lib 를 class path에 추가하였으므로 import 하여 사용가능
// applicationContext.xml 는 spring 설정 파일이고
// classpath 상에 존재해야 사용 가능
Resource r=new ClassPathResource("applicationContext.xml");
// spring 설정 파일 정보를 이용해 객체를 생성하는 factory를 반환받는다.
BeanFactory factory=new XmlBeanFactory(r);
Car car=(Car) factory.getBean("car"); // car는 bean id (applicationContext.xml)
car.go();
}
}