Spring-빈 포스트 프로세서

그만큼 BeanPostProcessor 인터페이스는 자체 인스턴스화 로직, 종속성 해결 로직 등을 제공하기 위해 구현할 수있는 콜백 메소드를 정의합니다. Spring 컨테이너가 하나 이상의 BeanPostProcessor 구현을 연결하여 Bean의 인스턴스화, 구성 및 초기화를 완료 한 후 일부 사용자 정의 로직을 구현할 수도 있습니다. .

여러 BeanPostProcessor 인터페이스를 구성 할 수 있으며 다음을 설정하여 이러한 BeanPostProcessor 인터페이스가 실행되는 순서를 제어 할 수 있습니다. order BeanPostProcessor가 Ordered 상호 작용.

BeanPostProcessor는 Bean (또는 객체) 인스턴스에서 작동합니다. 이는 Spring IoC 컨테이너가 Bean 인스턴스를 인스턴스화 한 다음 BeanPostProcessor 인터페이스가 작업을 수행함을 의미합니다.

ApplicationContext 구현으로 정의 된 모든 빈을 자동으로 감지합니다. BeanPostProcessor 이 빈을 포스트 프로세서로 등록하고 빈 생성시 컨테이너에 의해 적절하게 호출됩니다.

다음 예제는 ApplicationContext의 컨텍스트에서 BeanPostProcessors를 작성, 등록 및 사용하는 방법을 보여줍니다.

작동하는 Eclipse IDE를 준비하고 다음 단계를 수행하여 Spring 애플리케이션을 작성해 보겠습니다.

단계 기술
1 이름이 SpringExample 인 프로젝트를 만들고 아래에 com.tutorialspoint 패키지를 만듭니다 .src 생성 된 프로젝트의 폴더.
2 Spring Hello World 예제 장에 설명 된대로 Add External JARs 옵션을 사용하여 필요한 Spring 라이브러리를 추가하십시오 .
com.tutorialspoint 패키지 아래에 Java 클래스 HelloWorld , InitHelloWorldMainApp을 작성하십시오 .
4 아래에 Beans 구성 파일 Beans.xml을 만듭니다 .src 폴더.
5 마지막 단계는 모든 Java 파일과 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.");
   }
}

이것은 Bean의 초기화 전후에 Bean 이름을 인쇄하는 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파일. 여기에 종료 후크를 등록해야합니다.registerShutdownHook()AbstractApplicationContext 클래스에 선언 된 메서드입니다. 이것은 정상적인 종료를 보장하고 관련 파괴 메소드를 호출합니다.

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 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-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>

소스 및 빈 구성 파일 생성이 완료되면 애플리케이션을 실행하겠습니다. 응용 프로그램에 문제가 없으면 다음 메시지가 인쇄됩니다.

BeforeInitialization : helloWorld
Bean is going through init.
AfterInitialization : helloWorld
Your Message : Hello World!
Bean will destroy now.