맛동산

Simple Spring Maven에서 스프링 컨테이너 사용-1 본문

Web/Spring

Simple Spring Maven에서 스프링 컨테이너 사용-1

오지고지리고알파고포켓몬고 2017. 3. 12. 14:05


Simple Spring Maven 프로젝트에서 정적인 파일(설정파일 등)은 src/main/resources에서 관리하도록 함, 

자바 코드는 src/main/java에 생성


src/main/resources에 스프링 컨테이너로 사용할 xml파일을 생성 후 내용을 작성하고 class에서 불러오는 식으로 사용하게 됨


우선 간단한 예를 들어

<span style="color: rgb(53, 53, 53);"> 
<?xml version="1.0" encoding="UTF-8"?>
<!-- 여그가 빈 팩토리 -->
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<!-- spring.di.ch01 -->
	<bean id="message" class="spring.di.ch01.MessageKr"/> 
	
</beans>
</span>

- applicationContext.xml


<span style="color: rgb(53, 53, 53);"> 
package spring.di.ch01;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {

	public static void main(String[] args) {
		/* 설정파일(xml)로 부터 객체 주입(DI) */

		// 1. 스프링 설정파일로부터 스프링 컨테이너 생성
		AbstractApplicationContext context =
		new ClassPathXmlApplicationContext("applicationContext.xml");
		// 2. JVM 종료될 때 ApplicationContext를 종료하는 작업
		context.registerShutdownHook();
		// 3. 스프링 컨테이너에서 빈(객체)를 가져온다.
		MessageKr message = (MessageKr)context.getBean("message");
		// 4. 스프링 빈으로 메서드 호출
		message.sayHello("홍길동");
		// 5. 어플리케이션 종료시 컨테이너에 존재하는 모든 빈(객체) 닫기
		context.close();
	}

}
</span>

- spring.di.ch01.Main.java


<span style="color: rgb(53, 53, 53);"> 
package spring.di.ch01;

public class MessageKr {
	public MessageKr(){
		System.out.println("생성자");
	}
	public void sayHello(String name){
		System.out.println("안녕하세요, "+name+"씨");
	}
}
</span>

- spring.di.ch01.Message.java


과 같은 파일들이 있을 때, Main을 실행하게 되면

AbstractApplicationContext context =

new ClassPathXmlApplicationContext("applicationContext.xml");

이 명령을 실행하며 applicationContext.xml에 작성된 행위를 하게됨(생성자의 메세지로 확인)



applicationContext을 보면<bean id="message" class="spring.di.ch01.MessageKr"/>라는 줄이 있는데 message라는 id로 spring.di.ch01.MessageKr의 객체를 생성하겠다는 뜻임



다시 Main으로 돌아와서 MessageKr message = (MessageKr)context.getBean("message"); 코드를 보면 message변수에 스프링 컨테이너에서 생성된 객체를 id를 통해 호출하여 넣어주는 행위를 하는 것 을 볼 수 있음(주입한다 라고 함)



이렇게 MessageKr 객체가 주입된 message는 기존방법처럼 함수를 호출할 수있게 됨



-> 스프링 프레임워크는 위와 같이 스프링이 객체를 관리하고, 필요할 때 주입하여 사용하는 패턴을 갖는데, 처음엔 객체 생성하는데 왜 굳이 파일 하나 더 만드는 고생을 해야하나 싶었는데 이것의 장점은 web프로젝트를 할 때 깨달을 수 있음.

Comments