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

 

[Spring기초] Bean 초기화, 종료 메소드 실행(init-method, destroy-method)

- 이 글은 아래의 내용에서 이어지는 내용입니다. [Spring기초] Bean 생성시점, 싱글톤 문제(lazy-init, scope) - 이 글은 아래의 내용에서 이어지는 내용입니다. [Spring기초] bean 생성하기(XML로 생성) # XML로..

minaminaworld.tistory.com

 


# Bean이 생성될 때, 모든 Bean의 init와 destory를 실행하기

    - beans.xml에서 init-method, destory-method와 xml에서 지정되는 defalut-init-method와 defalut-destory-method의 차이점을 유의하시면 좋을 것 같습니다.

 


1. TestBean1.java , TestBean2.java ,TestBean3.java

   - TestBean1.java에는 init-method, destory-method만 명시

   - TestBean2.java에는 defalut-init-method , defalut-init-destroy만 명시

   - TestBean3.java에는 init-method, destory-method, defalut-init-method , defalut-init-destroy 명시

package beans;

public class TestBean1 {
	
	public TestBean1() {
		System.out.println("TestBean1 Created");
	}
	
	// 생성자 호출 후 자동으로 실행
	public void bean1Init() {
		System.out.println("TestBean1의 init 메서드");
	}
	
	// ClassPathXmlApplicationContext close 될 때 모든 메소드가 호출 된다.
	public void bean1Destory() {
		System.out.println("TestBean1의 destory 메소드");
	}
}
package beans;

public class TestBean2 {
	
	public TestBean2() {
		System.out.println("TestBean2 Created");
	}
	
	// 자동으로 생성될 때 호출
	public void defalutInit() {
		System.out.println("defalut init");
	}
	
	// 자동으로 없어질 때 호출
	public void defalutDestory() {
		System.out.println("defalut destory");
	}
}
package beans;

public class TestBean3 {

	public TestBean3() { // --1
		System.out.println("TestBean3 Created");
	}

	// 자동으로 생성될 때 호출
	public void defalutInit() {
		System.out.println("TestBean3 : defalut_init");
	}

	// 자동으로 없어질 때 호출
	// 가장 마지막으로 실행된다.
	public void defalutDestory() { // -- 4
		System.out.println("TestBean3 : defalut_destory");
	}

	// 생성자 호출 후 자동으로 실행
	public void bean3Init() { // --2
		System.out.println("TestBean3의 init 메서드");
	}

	// ClassPathXmlApplicationContext close 될 때 모든 메소드가 호출 된다.
	// Bean에서 지정된거 보다 먼저 실행된다 
	public void bean3Destory() { // --3
		System.out.println("TestBean3의 destory 메소드");
	}
}

 

 

2. beans.xml에 init-method,destory-method,defalut-init-method,defalut-init-destroy를 명시.

   - TestBean1.java에는 init-method, destory-method만 명시

   - TestBean2.java에는 defalut-init-method , defalut-init-destroy만 명시

   - TestBean3.java에는 init-method, destory-method, defalut-init-method , defalut-init-destroy 명시

<?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"
	default-init-method="defalutInit"
	default-destroy-method="defalutDestory">

	<!-- bean id 값으로 객체를 불러올 거라 bean id 값을 부여하였습니다. -->
	<!-- init-method와 destory-method에 TestBean.java 시작, 종료 메소드를 지정합니다. -->
	<bean id="test1" class="beans.TestBean1" lazy-init="true"
		init-method="bean1Init" destroy-method="bean1Destory"></bean>

	<!-- bean에는 명시하지 않고, xml 상단에 defalut로 명시합니다. -->
	<bean id="test2" class="beans.TestBean2" lazy-init="true"></bean>

	<!-- bean에도 명시하고 , xml 상단에 defalut로 명시합니다. -->
	<bean id="test3" class="beans.TestBean3" lazy-init="true"
		init-method="bean3Init" destroy-method="bean3Destory"></bean>

</beans>

 

 

3. Main.java에서 실행하기.

package main;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import beans.TestBean1;
import beans.TestBean2;
import beans.TestBean3;

public class Main {

	public static void main(String[] args) {
		System.out.println("-1------------");
		ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("config/beans.xml");
		
		// init-method, destory-method 지정
		TestBean1 t1 = ctx.getBean("test1", TestBean1.class);
		
		// defalut-init-method, defalut-destory-method 지정
		TestBean2 t2 = ctx.getBean("test2", TestBean2.class);
		
		// init-method, destory-method, defalut-init-method, defalut-destory-method 지정
		TestBean3 t3 = ctx.getBean("test3", TestBean3.class);
		
		ctx.close();
		System.out.println("-ctx.close() 됨");
	}
}

4. 결과화면

   - TestBean1은 생성자와 지정된 메소드 출력.

   - TestBean2은 생성자와 defalut 메소드 출력.

   - TestBean3은 생성자와 defalut와 지정된 메소드가 있지만 지정된 메소드만 출력.

 

블로그 이미지

미나미나미

,

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

 

[Spring기초] Bean 생성시점, 싱글톤 문제(lazy-init, scope)

- 이 글은 아래의 내용에서 이어지는 내용입니다. [Spring기초] bean 생성하기(XML로 생성) # XML로 bean 생성하기 - pom.xml : 스프링의 버전 정의 - Main.java : 생성된 Bean 객체 가져오기 - beans.xml : 생성..

minaminaworld.tistory.com


# Bean의 생성 시점과 종료 시점의 특정 메소드 실행하기 

    -  TestBean.java에 beanInit() , beanDestory() 메소드를 만들겠습니다. (메소드명은 마음대로 지정합니다.) 

    -  beans.xml에서 init-method, destory-method에 TestBean.java 메소드를 명시합니다.


1. TestBean.java에 생성 메소드, 종료 메소드를 만듭니다.

    -  TestBean.java에 beanInit() , beanDestory() 메소드를 만들겠습니다. (메소드명은 마음대로 지정합니다.) 

    -  beans.xml에서 init-method, destory-method에 TestBean.java 메소드를 명시합니다.

 

package beans;

public class TestBean {
	// 생성자
	public TestBean() {
		System.out.println("---------------------");
		System.out.println("TestBean을 생성하였습니다.");
		System.out.println("---------------------");
	}
	
	// bean 생성되는 시점에서 beanInit 메소드가 실행 
	public void beanInit() {
		System.out.println("######################");
		System.out.println("bean Init 메소드르르 생성합니다");
		System.out.println("######################");
		
	}
	
	// bean 종료되는 시점(ctx.close 되기전에)에서 beanDestory 메소드가 실행 
	public void beanDestory() {
		System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
		System.out.println("bean Destory 메소드르르 종료합니다");
		System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
	}
	
}

2. beanInitDestory.xml에 생성 메소드, 종료 메소드를 지정합니다.

    -  TestBean.java에 beanInit() , beanDestory() 메소드를 만들겠습니다. (메소드명은 마음대로 지정합니다.) 

    -  (생성한)beansInitDestory.xml에서 init-method, destory-method에 TestBean.java 메소드를 명시합니다.

 

<?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 값을 부여하였습니다. -->
	<!-- init-method와 destory-method에 TestBean.java 시작, 종료 메소드를 지정합니다.-->
	<bean id="test1" class="beans.TestBean" 
	 	lazy-init="true" 
		init-method="beanInit" 
		destroy-method="beanDestory"></bean>

</beans>

 

 

3. Main.java에서 bean을 가져오도록 하겠습니다.

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/beansInitDestory.xml");
		
		// getBean한 순간에 init-method 메소드가 실행됩니다.
		TestBean t1 = ctx.getBean("test1", TestBean.class);
		// ctx.close() 전에 bean t1의 요소의 destoy-method가 실행됩니다.
		
		ctx.close();
		System.out.println("-ctx.close() 됨");
	}
}

4. 실행 결과 화면.

    -  beanInit() , beanDestory() 실행되는 부분을 확인하시길 바랍니다.

 


 

블로그 이미지

미나미나미

,