Spring - Bean Post Processors
Các BeanPostProcessor interface xác định các phương thức gọi lại mà bạn có thể triển khai để cung cấp logic khởi tạo của riêng bạn, logic phân giải phụ thuộc, v.v. Bạn cũng có thể triển khai một số logic tùy chỉnh sau khi vùng chứa Spring kết thúc việc khởi tạo, cấu hình và khởi tạo bean bằng cách cắm một hoặc nhiều triển khai BeanPostProcessor .
Bạn có thể định cấu hình nhiều giao diện BeanPostProcessor và bạn có thể kiểm soát thứ tự mà các giao diện BeanPostProcessor này thực thi bằng cách thiết lập order thuộc tính miễn là BeanPostProcessor triển khai Ordered giao diện.
BeanPostProcessor hoạt động trên các cá thể bean (hoặc đối tượng), có nghĩa là vùng chứa Spring IoC khởi tạo một cá thể bean và sau đó các giao diện BeanPostProcessor thực hiện công việc của chúng.
An ApplicationContext tự động phát hiện bất kỳ đậu nào được xác định với việc triển khai BeanPostProcessor giao diện và đăng ký các bean này dưới dạng bộ xử lý hậu kỳ, sau đó được vùng chứa gọi một cách thích hợp khi tạo bean.
Thí dụ
Các ví dụ sau đây cho thấy cách viết, đăng ký và sử dụng BeanPostProcessors trong ngữ cảnh của ApplicationContext.
Hãy để chúng tôi có một IDE Eclipse đang hoạt động và thực hiện các bước sau để tạo một ứng dụng Spring -
Các bước | Sự miêu tả |
---|---|
1 | Tạo một dự án với tên SpringExample và tạo một gói com.tutorialspoint trongsrc thư mục trong dự án đã tạo. |
2 | Thêm các thư viện Spring bắt buộc bằng cách sử dụng tùy chọn Thêm JAR bên ngoài như được giải thích trong chương Ví dụ về Spring Hello World . |
3 | Tạo các lớp Java HelloWorld , InitHelloWorld và MainApp trong gói com.tutorialspoint . |
4 | Tạo tệp cấu hình Đậu Beans.xml trongsrc thư mục. |
5 | Bước cuối cùng là tạo nội dung của tất cả các tệp Java và tệp Cấu hình Bean và chạy ứng dụng như được giải thích bên dưới. |
Đây là nội dung của HelloWorld.java tập tin -
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.");
}
}
Đây là một ví dụ rất cơ bản về việc triển khai BeanPostProcessor, nó in ra một tên bean trước và sau khi khởi tạo bất kỳ bean nào. Bạn có thể triển khai logic phức tạp hơn trước và sau khi intializing một bean vì bạn có quyền truy cập vào đối tượng bean bên trong cả hai phương thức post processor.
Đây là nội dung của InitHelloWorld.java tập tin -
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
}
}
Sau đây là nội dung của MainApp.javatập tin. Ở đây bạn cần đăng ký một hook tắt máyregisterShutdownHook()phương thức được khai báo trên lớp AbstractApplicationContext. Điều này sẽ đảm bảo tắt máy một cách duyên dáng và gọi các phương thức hủy có liên quan.
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();
}
}
Sau đây là tệp cấu hình Beans.xml cần thiết cho các phương thức init và hủy -
<?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>
Khi bạn đã hoàn tất việc tạo tệp cấu hình nguồn và tệp bean, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau:
BeforeInitialization : helloWorld
Bean is going through init.
AfterInitialization : helloWorld
Your Message : Hello World!
Bean will destroy now.