DI 입문(1)
2020. 11. 18. 16:11ㆍ카테고리 없음
1) 자바의 동적할당 방법
- MainClass
package testPjt;
import org.springframework.context.support.GenericXmlApplicationContext;
public class MainClass {
public static void main(String[] args) {
// 자바에서 동적할당 할 때 방법
// new를 이용하여 생성자 호출, (메모리 동적할당)
TransportationWalk transportationWalk = new TransportationWalk();
// transportationWalk 객체의 move() 메서드 사용
transportationWalk.move();
}
}
- TransportationWalk Class
package testPjt;
public class TransportationWalk {
public void move() {
System.out.println("도보로 이동 합니다.");
}
}
2) Spring DI (Dependency Injection)
- applicationContext.xml 파일
> 디렉토리: project/src/main/resources/applicationContext.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">
// beans라는 container안에, id = 'tWalk'인 bean객체 생성
<bean id="tWalk" class="testPjt.TransportationWalk" />
</beans>
- id 가 'tWalk'인 bean 객체 생성
- 해당 객체는, TransportationWalk 클래스를 'tWalk'라는 id로 가져온 것
- MainClass
package testPjt;
import org.springframework.context.support.GenericXmlApplicationContext;
// Spring의 객체 생성
public class MainClass {
public static void main(String[] args) {
// GenericXmlApplicationContext : xml파일을 가져올 클래스, ctx라는 객체 생성
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext("classpath:applicationContext.xml");
// applicationContext.xml 파일에서 id가 tWalk라는 bean을 가져온다.
TransportationWalk transportationWalk = ctx.getBean("tWalk", TransportationWalk.class);
transportationWalk.move();
ctx.close();
}
}
- GenericXmlApplicationContext 클래스: xml 파일(applicationContext.xml)을 가져온다. => 시점에서 스프링 컨테이너 초기화 (생성)
- getBean() 메소드: 첫번째 인자는 xml 파일에서 정의한 id명, 두번째 인자는 사용할 객체(클래스) => Bean 객체 사용
- id가 'tWalk'인 bean 객체를 가져와, transportationWalk 라는 객체에 할당
- close()를 이용한 스프링 컨테이너 종료 => 스프링 컨테이너가 메모리에서 소멸 ( Bean 객체도 소멸 )