spring - 스프링 컨테이너

yeong ·2023년 2월 10일
0

spring

목록 보기
3/8

클래스들

인터페이스

package xyz.itwill03.spring;

public interface MessageObject {
	String getMessage();

}

인터페이스를 상속받은 2개의 클래스

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

포함관계 클래스

package xyz.itwill03.spring;

public class MessagePrint {
	//MessageObject 인터페이스를 상속받은 자식클래스의 객체를 저장하기 위한 필드
	// => 필드에 객체를 저장해야만 포함관계 성립 - 포함관계의 클래스에 작성된 메소드 호출 가능
	private MessageObject object;

	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);
	}
}

스프링 컨테이너

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) {
		/*
		 HelloMessageObject object=new HelloMessageObject();
		 MessagePrint print=new MessagePring();
		 print.setObject(object);//포함관계 성립 - 필드에 HelloMessageObject 객체 저장 
		 print.messagePrint();
		  */
		

		//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();
	}
	
}

스프링컨테이너

<?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"/>
	
	<!-- bean 엘리먼트의 하위 엘리먼트를 사용하여 Spring Bean에 대한 포함관계 설정 - 의존성 주입 -->
	<bean class="xyz.itwill03.spring.MessagePrint" id="messagePrint">
		<!-- <property name="object" ref="helloMessageObject"/> -->
		<property name="object" ref="helloMessageObject"/>
	</bean>
</beans>


0개의 댓글