f. Bean Post Processors - kimxavi/spring_tutorial GitHub Wiki

BeanPostProcessor๋Š” ์ž์‹ ์˜ ์ธ์Šคํ„ด์Šคํ™” ๋กœ์ง์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ๊ณผ ๊ทธ ์™ธ dependency-resolution ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๋Š” ์ฝœ๋ฐฑ ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•œ๋‹ค. ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ธ์Šคํ„ด์Šคํ™”๋ฅผ ๋๋‚ด๊ณ , ์„ค์ •ํ•˜๊ณ , ํ•˜๋‚˜ ์ด์ƒ์˜ BeanPostProcessor ๊ตฌํ˜„์„ ๋”ํ•œ bean์˜ ์ดˆ๊ธฐํ™” ์™€ ๊ฐ™์€ ์ปค์Šคํ…€ ๋กœ์ง์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŽ์€ BeanPostProcessor ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ณ  Ordered ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ implementsํ•œ ์„ธํŒ…์„ ํ”„๋กœํผํ‹ฐ์— ์„ธํŒ…ํ•จ์œผ๋กœ์จ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋‹ค. BeanPostProcessors๋Š” bean ์ด๋‚˜ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค์—์„œ ์šด์˜๋œ๋‹ค. ์ด๊ฒƒ์€ ์Šคํ”„๋ง IoC ์ปจํ…Œ์ด๋„ˆ๊ฐ€ bean ์ธ์Šคํ„ด์Šคํ™” ํ•˜๊ณ  ๋‹ค์Œ์— BeanPostProcessor ์ธํ„ฐํŽ˜์ด์Šค๋“ค์ด ๊ทธ ๋“ค์˜ ์ผ์„ ์‹คํ–‰ํ•œ๋‹ค.

ApplicationContext๋Š” BeanPostProcessor ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›์€ bean์„ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ปจํ…Œ์ด๋„ˆ์—์„œ bean์ด ์ƒ์„ฑ๋  ๋•Œ ์ ์ ˆํ•˜๊ฒŒ ํ˜ธ์ถœ๋˜๋Š” post-processors ๋กœ์จ bean๋“ค์— ๋“ฑ๋กํ•œ๋‹ค.

HelloWorld.java

package com.tutorialspoint;

public class HelloWorld {
   private String message;

   public void setMessage(String message){
      this.message  = message;
   }

   public void getMessage(){
      System.out.println("Your Message : " + message);
   }

   public void init(){
      System.out.println("Bean is going through init.");
   }

   public void destroy(){
      System.out.println("Bean will destroy now.");
   }
}
  • ์ด๊ฒƒ์€ ์•„์ฃผ ๊ฐ„๋‹จํ•œ BeanPostProcessor ๊ตฌํ˜„์ด๋‹ค. ์ด ๊ฒƒ์€ bean์˜ ์ด๋ฆ„์„ ์–ด๋– ํ•œ bean์ด๋“  ์ดˆ๊ธฐํ™” ์ „ํ›„์— ํ”„๋ฆฐํŠธํ•ด์ค€๋‹ค.

InitHelloWorld.java

package com.tutorialspoint;

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

public class InitHelloWorld implements BeanPostProcessor {
 
   public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
      System.out.println("BeforeInitialization : " + beanName);
      return bean;  // you can return any other object as well
   }

   public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
      System.out.println("AfterInitialization : " + beanName);
      return bean;  // you can return any other object as well
   }

}

MainApp.java

package com.tutorialspoint;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApp {
   public static void main(String[] args) {

      AbstractApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");

      HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
      obj.getMessage();
      context.registerShutdownHook();
   }
}

Beans.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-3.0.xsd">

   <bean id="helloWorld" class="com.tutorialspoint.HelloWorld"
       init-method="init" destroy-method="destroy">
       <property name="message" value="Hello World!"/>
   </bean>

   <bean class="com.tutorialspoint.InitHelloWorld" />

</beans>

PRINT

BeforeInitialization : helloWorld
Bean is going through init.
AfterInitialization : helloWorld
Your Message : Hello World!
Bean will destroy now.
โš ๏ธ **GitHub.com Fallback** โš ๏ธ