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

 

[Spring기초] 모든 Bean 생성, 종료 메소드 실행(default-init-method, defalut-destroy-method)

- 이 글은 아래의 내용에서 이어지는 내용입니다. [Spring기초] Bean 초기화, 종료 메소드 실행(init-method, destroy-method) - 이 글은 아래의 내용에서 이어지는 내용입니다. [Spring기초] Bean 생성시점, 싱글..

minaminaworld.tistory.com


# 목표 : Bean이 생성시 실행되는 메소드(BeanPostProcessor)에 대해서 알아보겠습니다. 

    - 특정한 자바의 클래스에서 BeanPostProcessor를 implements를 통해서 모든 Bean의 생성 할 때, 확인할 수 있는 클래스를 만들어 보겠습니다.

    - 참고하시면 이해하기 좋은 StackOverflow 자료입니다.

    # https://stackoverflow.com/questions/29743320/how-exactly-does-the-spring-beanpostprocessor-work

 

How exactly does the Spring BeanPostProcessor work?

I am studying for the Spring Core certification an I have some doubts about how Spring handle the beans lifecycle and in particular about the bean post processor. So I have this schema: It is pre...

stackoverflow.com


#  1. beanPostProcessorTest.java 생성하기

package beanPostProcessor;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;

public class beanPostProcessorTest implements BeanPostProcessor {

	public beanPostProcessorTest() {
		System.out.println("--------------------------------");
		System.out.println("beanPostProcessorTest를 생성했습니다.");
		System.out.println("--------------------------------");
	}

	@Override
	public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
		System.out.println("init-method가 시작 되기 전.");
		System.out.println("beanName post process before Initialization = > " + beanName);
		// 객체를 반환
		return bean;
	}

	@Override
	public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
		System.out.println("init-method가 시작 된 후.");
		System.out.println("beanName post Process After Initialization = > " + beanName);
		// 객체를 반환
		return bean;
	}
}

#  2. beans.xml에 beanPostProcessorTest.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"
	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> -->

	<!-- 각각 생성 될 때마다 해당 메소드가 호출된다. -->
	<!-- 이 부분에 명시합니다. -->
	<bean class="beanPostProcessor.beanPostProcessorTest"></bean>

</beans>

#  3. TestBean1.java

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 메소드");
	}
}

#  4. 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() 됨");
	}
}

#  5. 실행결과


 

블로그 이미지

미나미나미

,