[Spring] Bean 객체 생명주기

Bean 객체의 생명 주기

Spring Bean 은 IOC 컨테이너가 종료될 때 객체가 소멸된다. 즉, close() 메소드를 이용하면 해당 컨테이너가 생성한 모든 객체를 소멸시킬 수 있다.

이처럼 객체는 생성과 소멸 과정을 거치는데, 개발자는 객체 생성과 소멸 시 호출될 메서드를 등록할 수 있다. 각 단계마다의 특징은 아래와 같다.

  • 객체가 생성되면 가장 먼저 생성자가 호출된다.
  • init-method : 생성자 호출 이후 자동으로 호출된다.
  • destroy-method : 객체가 소멸될 때 가종으로 호출된다.
  • default-init-method : init-method 를 설정하지 않은 경우 자동으로 호출된다.
  • default-destroy-method : destroy-method 를 설정하지 않은 경우 자동으로 호출된다.

init-method 사용법

  • 클래스에 생성 후 사용할 메소드를 정의한다
  • xml 파일 내부 bean 태그에 init-method=" " 에 객체의 메소드를 삽입한다

destroy-method 사용법

  • 클래스에 소멸 후 사용할 메소드를 정의한다
  • xml 파일 내부 bean 태그에 destroy-method=" " 에 객체의 메소드를 삽입한다

default-init-method / default-destroy-method 사용법

  • 클래스에 소멸 후 사용할 메소드를 정의한다
  • xml 파일 내부 상단의 beans 태그에 default 값을 삽입한다
  • 같은 이름의 default-method를 가지지 않은 객체들은 무시된다
  • 중복되는 경우 init-method, destroy-method 메소드가 우선순위를 가진다

예제 코드

자바 코드

package com.springpractice.beans;

public class TestBean {
	public TestBean(){
		System.out.println("생성 완료");
	}
	
	public void testInit(){
		System.out.println("TestBean Init");
	}
	
	public void testDestroy() {
		System.out.println("TestBean Destroyed");
	}
}

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='testBean' class='com.springpractice.beans.TestBean' init-method="testInit" destroy-method="testDestroy"></bean>	
</beans>

Main 클래스

package com.springpratice.main;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.springpractice.beans.TestBean;

public class MainClass {

	public static void main(String[] args) {
		test3();
	}

	// ApplicationContext - 패키지 내부
	public static void test3() {
		ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("com/springpractice/config/beans.xml");
		TestBean tb1 = ctx.getBean("testBean", TestBean.class);
		System.out.printf("tb1 : %s\n", tb1);
		ctx.close();
	}
}

결과

02:31:49.473 [main] DEBUG org.springframework.context.support.ClassPathXmlApplicationContext - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@f5f2bb7
02:31:49.847 [main] DEBUG org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loaded 1 bean definitions from class path resource [com/springpractice/config/beans.xml]
02:31:49.890 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'testBean'
생성 완료
TestBean Init
tb1 : com.springpractice.beans.TestBean@51e5fc98
02:31:49.948 [main] DEBUG org.springframework.context.support.ClassPathXmlApplicationContext - Closing org.springframework.context.support.ClassPathXmlApplicationContext@f5f2bb7, started on Tue Jan 04 02:31:49 KST 2022
TestBean Destroyed

Updated:

Leave a comment