[Spring 4-1] BeanFactory 또는 ApplicationContext로 스프링 컨테이너 제공하는 방법 예제

임승현·2023년 2월 13일

Spring

목록 보기
8/46

💯예제

※ src/main/java 폴더에 xyz.itwill04.bean 패키지 생성

🌈클래스 생성

📃CreateBean.java(클래스)

※ xyz.itwill04.bean 패키지에 CreateBean.java 클래스 생성

package xyz.itwill04.bean;
//
public class CreateBean {
	public CreateBean() {
		// TODO Auto-generated constructor stub
		System.out.println("### CreateBean 클래스의 기본 생성자 호출 ###");
	}
	//
	public void display() {
		System.out.println("*** CreateBean 클래스의 display() 메소드 호출 ***");
	}
}

🌈환경설정 파일 생성(xml)

📢Spring Bean Configuration File을 여러개 작성하여 사용하는 이유
→ 하나의 Spring Bean Configuration File을 사용하여 Spring Bean을 설정할 경우 가독성 및 유지보수의 호율의 비효율성 증가
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
📌import : 다른 Spring Bean Configuration File의 Spring Bean 정보를 제공받아 포함하기 위한 엘리먼트
📍resource 속성 : 포함될 Spring Bean Configuration File의 경로를 속성값으로 설정
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
🌟bean : 스프링 컨테이너에게 Spring Bean 관련 정보를 제공하기 위한 엘리먼트
→ Spring Bean : 스프링 컨테이너에 의해 관리(생성,사용,소멸)되는 객체(클래스)
📍class 속성 : Spring Bean으로 등록되어 사용될 클래스를 속성값으로 설정 - 필수
→ class 속성값은 이클립스의 자동 완성 기능을 사용하여 작성 가능
📍id 속성 : Spring Bean을 구분하기 위한 식별자를 속성값으로 설정
→ id 속성 대신 name 속성을 사용하여 식별자 설정 가능
→ id 속성값은 클래스 이름(부모 인터페이스 이름)을 이용하여 설정하는 것을 권장
→ id 속성값은 class 속성이 설정되어 있는 경우 이클립스의 자동 완성 기능을 사용하여 작성 가능

📃04-1_beanCreate.xml

※ src/main/resources 폴더에 04-1_beanCreate.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을 여러개 작성하여 사용하는 이유 -->
	<!-- → 하나의 Spring Bean Configuration File을 사용하여 Spring Bean을 설정할 경우 가독성 및 유지보수의 호율의 비효율성 증가 -->
	<!-- ================================================================================ -->
	<!-- import : 다른 Spring Bean Configuration File의 Spring Bean 정보를 제공받아 포함하기 위한 엘리먼트 -->
	<!-- resource 속성 : 포함될 Spring Bean Configuration File의 경로를 속성값으로 설정 -->
	<!-- <import resource="03_message.xml"/> -->
	<!-- ================================================================================ -->
	<!-- ★bean : 스프링 컨테이너에게 Spring Bean 관련 정보를 제공하기 위한 엘리먼트 -->
	<!-- → Spring Bean : 스프링 컨테이너에 의해 관리(생성,사용,소멸)되는 객체(클래스) -->
	<!-- class 속성 : Spring Bean으로 등록되어 사용될 클래스를 속성값으로 설정 - 필수 -->
	<!-- → class 속성값은 이클립스의 자동 완성 기능을 사용하여 작성 가능 -->
	<!-- id 속성 : Spring Bean을 구분하기 위한 식별자를 속성값으로 설정 -->
	<!-- →	id 속성 대신 name 속성을 사용하여 식별자 설정 가능 -->
	<!-- →	id 속성값은 클래스 이름(부모 인터페이스 이름)을 이용하여 설정하는 것을 권장 -->
	<!-- → id 속성값은 class 속성이 설정되어 있는 경우 이클립스의 자동 완성 기능을 사용하여 작성 가능 -->
	<bean class="xyz.itwill04.bean.CreateBean" id="createBean"/>
</beans>

🌈프로그램 생성

📢Spring Framework에서는 BeanFactory 객체 또는 ApplicationContext 객체로 스프링 컨테이너(Spring Container) 기능 제공
→ 스프링 컨테이너는 환경설정파일(Spring Bean Configuration File - XML)을 제공받아 클래스의 객체(Spring Bean)를 관리

📃CreateBeanApp.java(클래스)

※ xyz.itwill04.bean 패키지에 CreateBeanApp.java 클래스 생성

package xyz.itwill04.bean;
//
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.FileSystemResource;
//
//Spring Framework에서는 BeanFactory 객체 또는 ApplicationContext 객체로 스프링 컨테이너(Spring Container) 기능 제공
//→ 스프링 컨테이너는 환경설정파일(Spring Bean Configuration File - XML)을 제공받아 클래스의 객체(Spring Bean)를 관리
@SuppressWarnings("deprecation")
public class CreateBeanApp {
	public static void main(String[] args) {
		//BeanFactory를 이용한 방법
		System.out.println("1.BeanFactory 객체를 생성하여 스프링 컨테이너로 사용");
		System.out.println("============== Spring Container 초기화 전 ==============");
		//BeanFactory 인터페이스를 상속받은 클래스로 객체를 생성 - BeanFactory 객체
		//→ BeanFactory 객체를 생성할 때 Spring Bean Configuration File를 제공받아 스프링 컨테이너 생성 - 스프링 컨테이너의 초기화 작업
		//→ Spring Bean Configuration File의 파일경로를 모두 표현하여 설정
		//→ BeanFactory 객체는 Spring Bean Configuration File에 등록된 클래스로 미리 생성하지 않고 Spring Bean 요청시 객체를 생성하여 제공
		BeanFactory factory=new XmlBeanFactory(new FileSystemResource("src/main/resources/04-1_beanCreate.xml"));
		System.out.println("============== Spring Container 초기화 후 ==============");
		//BeanFactory.getBean(String beanName) : 스프링 컨테이너에서 Spring Bean을 구분하기 위한 식별자(beanId 또는 beanName)을 
		// 전달하여 객체(Spring Bean)를 생성하여 반환하는 메소드
		//→ Object 타입의 객체를 반환하므로 반드시 명시적 객체 형변환 사용
		//→ 전달받은 식별자(beanName)에 대한 Spring Bean이 없는 경우 NoSuchBeanDefinitionException 발생
		CreateBean bean1=(CreateBean)factory.getBean("createBean");
		bean1.display();
		System.out.println("========================================================");
		//====================================================================================================================================
		//ApplicationContext를 이용한 방법
		System.out.println("2.ApplicationContext 객체를 생성하여 스프링 컨테이너로 사용");
		System.out.println("============== Spring Container 초기화 전 ==============");
		//ApplicationContext 인터페이스를 상속받은 클래스로 객체를 생성 - ApplicationContext 객체
		//→ ApplicationContext 객체를 생성할 때 Spring Bean Configuration File를 제공받아 스프링 컨테이너 생성 - 스프링 컨테이너의 초기화 작업
		//→ 클래스가 참조 가능한 디텍토리(ClassPath)에 있는 Spring Bean Configuration File을 설정
		//→ ApplicationContext 객체는 Spring Bean Configuration File에 등록된 클래스로 미리 객체를 생성하여 Spring Bean 요청시 제공
		ApplicationContext context=new ClassPathXmlApplicationContext("04-1_beanCreate.xml");
		System.out.println("============== Spring Container 초기화 후 ==============");
		//DL(Dependency Lookup) : 스프링 컨테이너로부터 필요한 Spring Bean을 검색하여 제공하는 메소드
		//ApplicationContext.getBean(String beanName) : 스프링 컨테이너에서 Spring Bean을 구분하기 위한 식별자(beanName)을 전달하여 객체(Spring Bean)를 반환하는 메소드
		CreateBean bean2=(CreateBean)context.getBean("createBean");
		bean2.display();
		//
		//ClassPathXmlApplicationContext.close() : ApplicationContext 객체를 제거하는 메소드
		//→ 스프링 컨테이너에 의해 관리되는 모든 객체(Spring Bean) 자동 소멸
		((ClassPathXmlApplicationContext)context).close();
		System.out.println("========================================================");
	}
}

0개의 댓글