「Spring认证」Spring Bean 后处理器

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

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

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

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

示例

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

让我们有一个工作的 Eclipse IDE 并采取以下步骤来创建一个 Spring 应用程序 -

这是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 之前和之后实现更复杂的逻辑,因为您可以访问两个后处理器方法中的 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文件的内容。这里需要注册一个在 AbstractApplicationContext 类上声明的关闭钩子registerShutdownHook()方法。这将确保正常关闭并调用相关的销毁方法。

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();
   }}

以下是init 和 destroy 方法所需的配置文件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>

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

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

相关推荐

  • Spring是怎么创建一个Bean的?

    Spring是怎么创建一个Bean的?

  • SpringBean生命周期

    在传统的Java应用中,Bean的生命周期很简单,使用关键字new实例化Bean,当不需要该Bean时,由Java自动进行垃圾回收. Spring中Bean的生命周期较复杂,可以表示为:Bean的定义 ...

  • 如何记忆 Spring Bean 的生命周期

    如何记忆 Spring Bean 的生命周期

  • 「Spring认证」Spring Bean 定义继承

    一个 bean 定义可以包含很多配置信息,包括构造函数参数.属性值和容器特定的信息,例如初始化方法.静态工厂方法名称等.子 bean 定义从父定义继承配置数据.子定义可以根据需要覆盖某些值或添加其他值 ...

  • 「Spring认证」Spring认证框架教程

    Spring 可能是您所有企业应用程序的一站式商店.但是,Spring 是模块化的,允许您挑选适合您的模块,而无需引入其余模块.以下部分提供有关 Spring Framework 中所有可用模块的详细 ...

  • 「Spring认证」Spring环境设置

    本章将指导您如何准备开发环境以开始使用 Spring Framework.它还将教您如何在设置 Spring Framework 之前在您的机器上设置 JDK.Tomcat 和 Eclipse - 步 ...

  • Spring认证-注入内部 Bean

    如您所知,Java 内部类是在其他类的范围内定义的,类似地,内部 bean是在另一个 bean 的范围内定义的 bean.因此, 或 元素内的 元素称为内部 bean,如下所示. 例子 让我们使用 E ...

  • 老年人学手机在网上进行「社保认证」

    老年人学手机(085)在网上进行「社保认证」 我从2018年开始,每年社保认证都是在手机上进行,除了第一次注册登录稍费占时间,以后每次认证用不了一分钟,在家里就认证通过了,非常方便. 根据我使用网上[ ...

  • 「养猪技术」猪驱虫后不见虫,这正常吗?养猪场驱虫必知!

    驱虫的好坏直接决定这猪场的效益.据不完全统计:有90%以上的猪场存在寄生虫感染的问题;有超过80%的猪场对本场的驱虫效果是不满意的. 驱虫不是想当然,更不是走过场,猪场驱虫.刻不容缓! 为什么驱虫不见 ...

  • 小说测评《头等舱》|乘坐「时代头等舱」的70后女大学生

    文穴阅读馆  新用户5元券 作者:Jay 校对:litcave 工作室 配图:Online 测评书目:<头等舱> 作者:黄佟佟 90年代初是一个充满生机的时代.那时候的中国,所有人似乎都站 ...

  • 「划重点」改善骨盆后倾瑜伽序列,滋养脊柱,缓解腰椎不适!

    今天的练习难度为:★★★ 由于一些外因导致,骨盆不仅仅是会向前前倾斜,也有可能会向后倾斜. 例如:坐姿不正确(喜欢靠很软的沙发上睡觉或看电视,上班时久坐伏案,长期开车,打麻将),后背竖脊肌无力,孕期哺 ...

  • 「名家医案」丁启后益气温阳,化气行水,养阴润燥通便治疗癃闭

    [名家医案]丁启后益气温阳,化气行水,养阴润燥通便治疗癃闭 医案标题: 益气温阳,化气行水,养阴润燥通便治疗癃闭(气阴两虚,阳气不足) 医生姓名: 丁启后 初诊 患者姓名: 杜某 女 65岁 就诊时间 ...