สปริง - โปรเซสเซอร์ Bean Post

BeanPostProcessor อินเทอร์เฟซกำหนดวิธีการโทรกลับที่คุณสามารถนำไปใช้เพื่อจัดเตรียมลอจิกการสร้างอินสแตนซ์ของคุณเองตรรกะการแก้ปัญหาการอ้างอิง ฯลฯ นอกจากนี้คุณยังสามารถใช้ตรรกะที่กำหนดเองบางอย่างได้หลังจากที่คอนเทนเนอร์ Spring เสร็จสิ้นการสร้างอินสแตนซ์การกำหนดค่าและการเริ่มต้น Bean โดยการเสียบการใช้งาน BeanPostProcessor อย่างน้อยหนึ่งรายการ .

คุณสามารถกำหนดค่าอินเทอร์เฟซ BeanPostProcessor หลายรายการและคุณสามารถควบคุมลำดับที่อินเทอร์เฟซ BeanPostProcessor เหล่านี้ดำเนินการได้โดยการตั้งค่า order คุณสมบัติที่ให้ BeanPostProcessor ดำเนินการ Ordered อินเตอร์เฟซ.

BeanPostProcessors ทำงานบนอินสแตนซ์ bean (หรืออ็อบเจ็กต์) ซึ่งหมายความว่าคอนเทนเนอร์ Spring IoC สร้างอินสแตนซ์อินสแตนซ์ bean จากนั้นอินเทอร์เฟซ BeanPostProcessor จะทำงาน

อัน ApplicationContext ตรวจจับถั่วใด ๆ โดยอัตโนมัติที่กำหนดด้วยการใช้งานไฟล์ BeanPostProcessor อินเทอร์เฟซและรีจิสเตอร์ถั่วเหล่านี้เป็นตัวประมวลผลภายหลังที่จะเรียกใช้อย่างเหมาะสมโดยคอนเทนเนอร์เมื่อสร้างถั่ว

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงวิธีการเขียนลงทะเบียนและใช้ BeanPostProcessors ในบริบทของ ApplicationContext

ให้เรามี Eclipse IDE ที่ใช้งานได้และทำตามขั้นตอนต่อไปนี้เพื่อสร้างแอปพลิเคชัน Spring -

ขั้นตอน คำอธิบาย
1 สร้างโปรเจ็กต์ด้วยชื่อSpringExampleและสร้างแพ็คเกจcom.tutorialspointภายใต้ไฟล์src โฟลเดอร์ในโครงการที่สร้างขึ้น
2 เพิ่มไลบรารี Spring ที่จำเป็นโดยใช้ตัวเลือกเพิ่ม JAR ภายนอกตามที่อธิบายไว้ในบทตัวอย่าง Spring Hello World
3 สร้างคลาส Java HelloWorld , InitHelloWorldและMainAppภายใต้แพ็คเกจcom.tutorialspoint
4 สร้างไฟล์คอนฟิกูเรชัน Beans Beans.xmlภายใต้ไฟล์src โฟลเดอร์
5 ขั้นตอนสุดท้ายคือการสร้างเนื้อหาของไฟล์ Java และไฟล์ Bean Configuration และเรียกใช้แอปพลิเคชันตามที่อธิบายด้านล่าง

นี่คือเนื้อหาของ 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 ใด ๆ คุณสามารถใช้ตรรกะที่ซับซ้อนมากขึ้นก่อนและหลังการใส่ถั่วได้เนื่องจากคุณสามารถเข้าถึงอ็อบเจ็กต์ 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ไฟล์. ที่นี่คุณต้องลงทะเบียน hook การปิดระบบ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 จำเป็นสำหรับวิธีการเริ่มต้นและทำลาย -

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