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 객체도 소멸 )