「Spring认证」Spring Bean 后处理器

2021-08-24 17:10发布

BeanPostProcessor的接口定义场景方法,你可以实现自己的实例化逻辑,依赖解析逻辑等,还可以实现后的Spring容器完成实例化,配置,并通过在一个或可能堵塞初始化豆类的一些自定义逻辑BeanPostProcessor 实现。

您可以配置多个 BeanPostProcessor,并且您可以通过接口设置顺序属性来控制这些 BeanPostProcessor 接口的执行顺序,当然是 BeanPostProcessor 实现了有序接口。

BeanPostProcessor 操作 bean(或对象)实例,这就是 Spring IoC 容器实例化一个 bean 实例,BeanPostProcessor 接口完成它们的工作。

一个ApplicationContext的自动检测与该执行中定义的任何豆类的BeanPostProcessor接口,并注册这些豆类如后处理器,被然后通过容器创建bean的适当调用。

示例

下面的示例展示了如何在 ApplicationContext 的上下文中写、注册和使用 BeanPostProcessors。

让我们有一个工作的 Eclipse IDE,并通过以下步骤来创建一个 Spring 应用程序——

这是HelloWorld.java文件的内容-

包 com.tutorialspoint;公共类 HelloWorld {

私人字符串消息;

公共无效setMessage(字符串消息){

   this.message = 消息;

}

公共无效getMessage(){

   System.out.println("您的留言:" + message);

}

公共无效初始化(){

   System.out.println("Bean 正在初始化。");

}

公共无效销毁(){

   System.out.println("Bean 现在会销毁。");

}}

这是实现 BeanPostProcessor 的一个非常基本的示例,它在任何 bean 初始化之前和之后打印一个 bean 名称。您可以在初始化 bean 之前和之后实现更复杂的逻辑,因为您可以访问两个后处理器中的豆对象。

这是InitHelloWorld.java文件的内容-

package com.tutorialspoint;import org.springframework.beans.factory.config.BeanPostProcessor;import org.springframework.beans.BeansException;公共类InitHelloWorld实现BeanPostProcessor{

公共对象 postProcessBeforeInitialization(Object bean, String beanName)

   抛出 BeansException {

 

   System.out.println("初始化前:" + beanName);

   还豆;// 你也可以返回任何其他对象

}

公共对象 postProcessAfterInitialization(Object bean, String beanName)

   抛出 BeansException {

 

   System.out.println("初始化后:" + beanName);

   还豆;// 你也可以返回任何其他对象

}}

以下是MainApp.java文件的内容。这里需要注册一个在AbstractApplicationContext类上声明的关闭钩子注册ShutdownHook ()方法。这将确保关闭并调用相关的精确方法。

包com.tutorialspoint;进口org.springframework.context.support.AbstractApplicationContext;进口org.springframework.context.support.ClassPathXmlApplicationContext;公共类MainApp {

公共静态无效主(字符串 [] args){

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

   HelloWorld obj = (HelloWorld) context.getBean("helloWorld");

   obj.getMessage();

   context.registerShutdownHook();

}}

以下是初始化和销毁方法所需的配置文件beans.xml中-

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


   init-method = "init" destroy-method = "destroy">

   



完成创建源文件和 bean 配置文件后,让我们运行应用程序。如果您的应用程序一切正常,打印以下消息 -

初始化前:helloWorld

Bean 正在经历 init.AfterInitialization : helloWorld

您的消息:Hello World!Bean 现在将销毁。