[Spring 3-4] ๐ŸŒŸSpring Container์˜ ์ข‹์€์ 

์ž„์Šนํ˜„ยท2023๋…„ 2์›” 10์ผ

Spring

๋ชฉ๋ก ๋ณด๊ธฐ
6/46

๐Ÿ“ขSpring Container์˜ ์ข‹์€์ 

1. Factory ํด๋ž˜์Šค๋ฅผ ์•ˆ๋งŒ๋“ค์–ด๋„๋Œ

2. ํด๋ž˜์Šค ์ˆ˜์ •์‹œ xml ํŒŒ์ผ๋งŒ ์ˆ˜์ •

โ€ป src/main/java ํด๋”์— xyz.itwill03.spring ํŒจํ‚ค์ง€ ์ƒ์„ฑ

๐ŸŒˆ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ

๐Ÿ“ƒMessageObject.java(์ธํ„ฐํŽ˜์ด์Šค)

โ€ป xyz.itwill03.spring ํŒจํ‚ค์ง€์— MessageObject.java ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ

package xyz.itwill03.spring;
//
public interface MessageObject {
	String getMessage();
}

๐ŸŒˆ์ถœ๋ ฅํ•  ๋ฉ”์„ธ์ง€ ์ž‘์„ฑ(์˜ค๋ฒ„๋ผ์ด๋“œ)

๐Ÿ“ƒHelloMessageObject.java(ํด๋ž˜์Šค)

โ€ป xyz.itwill03.spring ํŒจํ‚ค์ง€์— HelloMessageObject.java ํด๋ž˜์Šค ์ƒ์„ฑ

package xyz.itwill03.spring;
//
public class HelloMessageObject implements MessageObject {
	@Override
	public String getMessage() {
		// TODO Auto-generated method stub
		return "Hello!!!";
	}
}

๐ŸŒˆ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ํ•„๋“œ

๐Ÿ“ƒMessagePrint.java(ํด๋ž˜์Šค)

โ€ป xyz.itwill03.spring ํŒจํ‚ค์ง€์— MessagePrint.java ํด๋ž˜์Šค ์ƒ์„ฑ

package xyz.itwill03.spring;
//
public class MessagePrint {
	//MessageObject ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ์ž์‹ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ํ•„๋“œ
	//โ†’ ํ•„๋“œ์— ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•ด์•ผ๋งŒ ํฌํ•จ๊ด€๊ณ„ ์„ฑ๋ฆฝ - ํฌํ•จ๊ด€๊ณ„์˜ ํด๋ž˜์Šค ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ๊ฐ€๋Šฅ
	private MessageObject object;
	//get,set ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ
	public MessageObject getObject() {
		return object;
	}
	public void setObject(MessageObject object) {
		this.object = object;
	}
	//
	public void messagePrint() {
		String message=object.getMessage();
		System.out.println("message = "+message);
	}
}

๐ŸŒˆxml ํŒŒ์ผ ์ƒ์„ฑ

1. src/main/resources ์˜ค๋ฅธ์ชฝ ํด๋ฆญ โ†’ New โ†’ Spring Bean confuguration File ํด๋ฆญ

2. File Name ์ž‘์„ฑ โ†’ Next

3. ์ฒดํฌํ•ญ๋ชฉ ํ™•์ธ โ†’ Finish

๐Ÿ“ข์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ํ™˜๊ฒฝ์„ค์ •ํŒŒ์ผ(Spring Bean Configuration File - XML)๋กœ๋ถ€ํ„ฐ ํด๋ž˜์Šค๋ฅผ ์ œ๊ณต๋ฐ›์•„ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ด€๋ฆฌ
โ†’ Spring Bean : ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” ๊ฐ์ฒด(ํด๋ž˜์Šค)
โ†’ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ๋ฆฌํ”Œ๋ ‰์…˜(Reflection) ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด ์ƒ์„ฑ

๐Ÿ“ขbean ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—๊ฒŒ Spring Bean์œผ๋กœ ์‚ฌ์šฉ๋  ํด๋ž˜์Šค ์ œ๊ณต

<bean class="xyz.itwill03.spring.HelloMessageObject" id="helloMessageObject"/>

๐Ÿ“ขbean ์—˜๋ฆฌ๋จผํŠธ์˜ ํ•˜์œ„ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Spring Bean์— ๋Œ€ํ•œ ํฌํ•จ๊ด€๊ณ„ ์„ค์ • - ์˜์กด์„ฑ ์ฃผ์ž…

<bean class="xyz.itwill03.spring.MessagePrint" id="messagePrint">
	<property name="object" ref="helloMessageObject"/><!-- object์— helloMessageObject๋ฅผ ์ €์žฅ -->
</bean>

๐Ÿ“ƒ03_message.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 https://www.springframework.org/schema/beans/spring-beans.xsd">
	<!-- ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ํ™˜๊ฒฝ์„ค์ •ํŒŒ์ผ(Spring Bean Configuration File - XML)๋กœ๋ถ€ํ„ฐ ํด๋ž˜์Šค๋ฅผ ์ œ๊ณต๋ฐ›์•„ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ด€๋ฆฌ -->
	<!-- โ†’ Spring Bean : ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” ๊ฐ์ฒด(ํด๋ž˜์Šค) -->
	<!-- โ†’ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ๋ฆฌํ”Œ๋ ‰์…˜(Reflection) ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด ์ƒ์„ฑ -->
	<!-- bean ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—๊ฒŒ Spring Bean์œผ๋กœ ์‚ฌ์šฉ๋  ํด๋ž˜์Šค ์ œ๊ณต -->
	<bean class="xyz.itwill03.spring.HelloMessageObject" id="helloMessageObject"/>
	<bean class="xyz.itwill03.spring.HiMessageObject" id="hiMessageObject"/><!-- hi!!! ๋ฉ”์„ธ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ -->
	<!-- ================================================================================ -->
	<!-- bean ์—˜๋ฆฌ๋จผํŠธ์˜ ํ•˜์œ„ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Spring Bean์— ๋Œ€ํ•œ ํฌํ•จ๊ด€๊ณ„ ์„ค์ • - ์˜์กด์„ฑ ์ฃผ์ž… -->
	<bean class="xyz.itwill03.spring.MessagePrint" id="messagePrint">
		<!-- <property name="object" ref="helloMessageObject"/>--><!-- object์— helloMessageObject๋ฅผ ์ €์žฅ -->
		<property name="object" ref="hiMessageObject"/>
	</bean>
</beans>

๐ŸŒˆ๋ฉ”์„ธ์ง€ ํ˜ธ์ถœ

๐Ÿ“ƒMessagePrintApp.java(ํด๋ž˜์Šค)

โ€ป xyz.itwill03.spring ํŒจํ‚ค์ง€์— MessagePrintApp.java ํด๋ž˜์Šค ์ƒ์„ฑ

package xyz.itwill03.spring;
//
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
//
//์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ(Spring Container)๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ œ๊ณต๋ฐ›์•„ ์‚ฌ์šฉ
//โ†’ Spring Container : Spring Framework์—์„œ ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ์— ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ปดํผ๋„ŒํŠธ
//โ†’ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์•„๋‹Œ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌ - Spring Ioc
//โ†’ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ํ™˜๊ฒฝ์„ค์ •ํŒŒ์ผ(Spring Bean Configuration File - XML)์„ ์ด์šฉํ•˜์—ฌ ๊ฐ์ฒด์˜ ์ƒ๋ช…์ฃผ๊ธฐ(LifeCycle) ๊ด€๋ฆฌ ๋ฐ ๊ฐ์ฒด๊ฐ„์˜ ๊ด€๊ณ„ ์„ค์ •
public class MessagePrintApp {
	public static void main(String[] args) {
		//Spring Container ์‚ฌ์šฉ X
		/*
		HelloMessageObject object=new HelloMessageObject();
		MessagePrint print=new MessagePrint();
		print.setObject(object);//ํฌํ•จ๊ด€๊ณ„ ์„ฑ๋ฆฝ - ํ•„๋“œ์— MessagePrint ๊ฐ์ฒด ์ €์žฅ
		print.messagePrint();
		*/
		//================================================================================
		//Spring Container ์‚ฌ์šฉ O
		//ApplicationContext ๊ฐ์ฒด(์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๊ฐ์ฒด) ์ƒ์„ฑ
		//โ†’ Spring Bean Configuration File์„ ์ œ๊ณต๋ฐ›์•„ Spring Bean์„ ์ƒ์„ฑํ•˜์—ฌ ๊ด€๋ฆฌ
		ApplicationContext context=new ClassPathXmlApplicationContext("03_message.xml");
		//
		//์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋กœ๋ถ€ํ„ฐ ํ•„์š”ํ•œ Spring Bean์„ ์ œ๊ณต๋ฐ›์•„ ์ €์žฅ
		//โ†’ Spring Bean์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•œ ์‹๋ณ„์ž(beanName ๋˜๋Š” beanId)๋ฅผ ์ „๋‹ฌ
		MessagePrint print=(MessagePrint)context.getBean("messagePrint");
		//
		print.messagePrint();
		//
		//์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ œ๊ฑฐ
		((ClassPathXmlApplicationContext)context).close();
	}
}

๐ŸŒˆHi!!! ๋ฉ”์„ธ์ง€ ์ถœ๋ ฅ

๐Ÿ“ขHi!!!์„ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด ์œ„์— ์ฝ”๋“œ ์ˆ˜์ •
1. 03_message.xml

๐Ÿ“ƒHiMessageObject.java(ํด๋ž˜์Šค)

โ€ป xyz.itwill03.spring ํŒจํ‚ค์ง€์— HiMessageObject.java ํด๋ž˜์Šค ์ƒ์„ฑ

package xyz.itwill03.spring;
//
public class HiMessageObject implements MessageObject {
	@Override
	public String getMessage() {
		// TODO Auto-generated method stub
		return "Hi!!!";
	}
}

0๊ฐœ์˜ ๋Œ“๊ธ€