내 이해를 돕기 위한 컨테이너 흐름

DEV NAHYUN·2021년 10월 5일
0

Spring

목록 보기
1/8

스프링 퀵 스타트 p54

스프링 컨테이너의 동작 순서

① TVUser 클라이언트가 스프링 설정 파일을 로딩하여 컨테이너 구동
② 스프링 설정 파일에 등록된 SamsungTV 객체 생성
③ getBean() 메소드로 이름이 'tv'인 객체를 요청(Lookup)
④ SamsungTV 객체 반환

TVUser.java(클라이언트)

		// ------- 9/24 (금)
		// 스프링 컨테이너 구동 및 테스트
		// TV 객체를 테스트 하는 클라이언트 
		// 환경설정 파일인 application Context.xml을 로딩하여 스프링 컨테이너 중 하나인 Generic~~을 구동
		
		// 1. Spring 컨테이너를 구동한다.
	    AbstractApplicationContext factory = new GenericXmlApplicationContext("applicationContext.xml");

	    /* 구동 결과 
	     INFO : org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [applicationContext.xml]
	     INFO : org.springframework.context.support.GenericXmlApplicationContext - Refreshing org.springframework.context.support.GenericXmlApplicationContext@7fad8c79: startup date [Fri Sep 24 16:40:21 KST 2021]; root of context hierarchy
	     */
	    
	    // 2. Spring 컨테이너로부터 필요한 객체를 요청(Lookup)한다.
	    TV tv = (TV)factory.getBean("tv");
		tv.powerOn();
		tv.powerOff();
		tv.volumeUp();
		tv.volumeDown();
		
		// 3. Spring 컨테이너를 종료한다.
		factory.close();

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">

<!-- 스프링 설정 파일 -->

	<bean id="tv" class="polymorphism.SamsungTV"/>
	<!-- 클래스 하나 당 하나의 <bean> 설정이 필요하다. 
	중요한 것은 class 속성값. 여기에 패키지 경로가 포함된 전체 클래스 경로를 지정해야 한다. -->
	
</beans>

SamsungTV.java (삼성 TV 클래스)

package polymorphism;

// 다형성 실습

public class SamsungTV implements TV {

	
    // 구동된 컨테이너로부터 SamsungTV 객체를 얻어내 보자.
    // SamsungTV 객체가 언제 생성되는지 확인하기 위해서 기본 생성자를 추가
	public SamsungTV() {
		System.out.println("===> SamsungTV 객체 생성");
	}

	// 다형성을 활용한 코드(인터페이스 메소드 재정의 필요)

	public void powerOn() {
		System.out.println("SamsungTV---전원 켠다.");
	}

	public void powerOff() {
		System.out.println("SamsungTV---전원 끈다.");
	}

	public void volumeUp() {
		System.out.println("SamsungTV---소리 올린다.");
	}

	public void volumeDown() {
		System.out.println("SamsungTV---소리 내린다.");

	}
} 

실행 결과

INFO : org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [applicationContext.xml]
INFO : org.springframework.context.support.GenericXmlApplicationContext - Refreshing org.springframework.context.support.GenericXmlApplicationContext@7fad8c79: startup date [Tue Oct 05 13:20:04 KST 2021]; root of context hierarchy
===> SamsungTV 객체 생성
SamsungTV---전원 켠다.
SamsungTV---전원 끈다.
SamsungTV---소리 올린다.
SamsungTV---소리 내린다.
INFO : org.springframework.context.support.GenericXmlApplicationContext - Closing org.springframework.context.support.GenericXmlApplicationContext@7fad8c79: startup date [Tue Oct 05 13:20:04 KST 2021]; root of context hierarchy

스프링 컨테이너에 대해 좀 더...

  • 스프링에서는 BeanFactory와 이를 상속한 ApplicationContext 두 가지 유형의 컨테이너를 제공.
  • BeanFactory는 스프링 설정 파일에 등록된 bean 객체를 생성하고 관리하는 가장 기본적인 컨테이너 기능 제공. 컨테이너가 구동될 때 생성하는 것이 아니라 클라이언트의 요청에 의해서만 객체 생성. 따라서 일반적인 스프링 프로젝트에서 BeanFactory 를 사용할 일 없음.
  • ApplicationContext는 BeanFactory가 제공하는 bean 객체 관리 외에도 트랜잭션 관리나 다국어 처리 등 다양한 기능 지원. 컨테이너가 구동되는 시점에 bean 등록된 클래스들을 객체 생성하는 즉시 로딩. 웹 애플리케이션 개발도 지원하므로 대부분 스프링 프로젝트는 ApplicationContext 유형 이용.
  • A.C의 구현 클래스는 매우 다양하지만
    GenericXmlApplicationContext : 파일 시스템이나 클래스 경로에 있는 XML 설정 파일을 로딩하여 구동하는 컨테이너
    XmlWebApplictionContext :웹 기반의 스프링 애플리케이션을 개발할 때 사용하는 컨테이너
    지금은 이 둘만 알고 있으면 됨.
profile
나만 알아보면 된다는 마음으로 작더라도 조금씩

0개의 댓글

관련 채용 정보