'spring 싱글톤'에 해당되는 글 1건

- 이 글은 아래의 내용에서 이어지는 내용입니다.

 

[Spring기초] bean 생성하기(XML로 생성)

# XML로 bean 생성하기 - pom.xml : 스프링의 버전 정의 - Main.java : 생성된 Bean 객체 가져오기 - beans.xml : 생성할 bean 객체 명시 - TestBean.java : 생성할 Bean 객체 # Spring Bean의 알아야할 점 - Bean..

minaminaworld.tistory.com


# Bean의 생성 시점과 새로운 객체로 생성하기

    -  XML 에서 bean 요소에 lazy-init와 scope를 지정합니다.

    -  아래 xml 두개 bean 생성 요소에 lazy-init, scope를 넣어보겠습니다.

	<!-- 총 두개의 bean을 생성합니다. -->
	<!-- id값 없이 생성해 보도록 하겠습니다. -->
	<bean class="beans.TestBean"></bean>
	
	<!-- bean id 값으로 객체를 불러올 거라 bean id 값을 부여하였습니다. -->
	<bean id="test1" class="beans.TestBean"></bean>	

# Bean.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 값으로 객체를 불러올 거라 bean id 값을 부여하였습니다. -->
	<bean id="test1" class="beans.TestBean"></bean>

	<!-- getBean 할 때 마다 새로운 객체의 주소를 줍니다 -->
	<bean id="test2" class="beans.TestBean" scope="prototype"></bean>

	<!-- getBean 할 때 딱 한번 객체를 생성합니다. -->
	<bean id="test3" class="beans.TestBean" lazy-init="true"></bean>

	<!-- getBean 할 때 마다 객체를 생성 및 새로운 객체를 생성합니다 -->
	<bean id="test4" class="beans.TestBean" lazy-init="true"
		scope="prototype"></bean>

</beans>

1. Main.java

package main;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import beans.TestBean;

public class Main {

	public static void main(String[] args) {
		System.out.println("-1------------");
		ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("config/beans.xml");

		System.out.println("TestBean은 test1의 요소만 한번 생성");
		System.out.println("-2------------");
		// beans.xml에서 정의한 TestBean의 요소를 가져오겠습니다.
		System.out.println("-3--getBean 불러오기 전-");

		// getBean해서 부르기 전에 이미 test1의 bean의 생성되어진 상태.
		TestBean t1_1 = ctx.getBean("test1", TestBean.class);
		System.out.printf("t1 : %s\n", t1_1);
		TestBean t1_2 = ctx.getBean("test1", TestBean.class);
		System.out.printf("t2 : %s\n", t1_2);
		// t1_1,t1_2 동일한 주소의 객체.

		// scope가 정의된 bean은 getBean 할 때 마다 새로운 객체를 생성합니다.
		// getBean할 때마다 생성자가 실행됨.
		TestBean t2_1 = ctx.getBean("test2", TestBean.class);
		System.out.printf("t2_1 : %s\n", t2_1);
		TestBean t2_2 = ctx.getBean("test2", TestBean.class);
		System.out.printf("t2_2 : %s\n", t2_2);
		// t2_1,t2_2 동일한 주소를 가지고 있지 않음.

		// lazy-init가 정의된 bean은 getBean할 때 새로운 객체를 생성합니다.
		// 단, getBean한 이후, 싱글톤으로 생성된다.
		TestBean t3_1 = ctx.getBean("test3", TestBean.class);
		System.out.printf("t3_1 : %s\n", t3_1);
		TestBean t3_2 = ctx.getBean("test3", TestBean.class);
		System.out.printf("t3_2 : %s\n", t3_2);
		// t3_1과 t3_2의 주소가 동일하게 나올 것입니다.

		// getBena 할 때, 생성자가 실행되며, 항상 새로운 객체가 생성됩니다.
		TestBean t4_1 = ctx.getBean("test2", TestBean.class);
		System.out.printf("t2_1 : %s\n", t4_1);
		TestBean t4_2 = ctx.getBean("test2", TestBean.class);
		System.out.printf("t2_2 : %s\n", t4_2);
		// t4_1,t4_2 동일한 주소를 가지고 있지 않음.
		System.out.println("-4--getBean 불러온 후-");
		ctx.close();
	}

}

 

 


2. Main.java, Beans.xml 관계

  - main.java에서 실행 시, Beans.xml 정의된 내용

 


3. 결과화면

   - scope, lazy-init 이 정의된 내용에 따라서 bean 생성에 영향을 줍니다,

블로그 이미지

미나미나미

,