Spring Bean 后置处理器

转载自  Spring Bean 后置处理器

Spring——Bean 后置处理器

BeanPostProcessor 接口定义回调方法,你可以实现该方法来提供自己的实例化逻辑,依赖解析逻辑等。你也可以在 Spring 容器通过插入一个或多个 BeanPostProcessor 的实现来完成实例化,配置和初始化一个bean之后实现一些自定义逻辑回调方法。

你可以配置多个 BeanPostProcesso r接口,通过设置 BeanPostProcessor 实现的 Ordered 接口提供的 order 属性来控制这些 BeanPostProcessor 接口的执行顺序。

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

ApplicationContext 会自动检测由 BeanPostProcessor 接口的实现定义的 bean,注册这些 bean 为后置处理器,然后通过在容器中创建 bean,在适当的时候调用它。

例子:

下面的例子显示如何在 ApplicationContext 的上下文中编写,注册和使用 BeanPostProcessor。

我们在适当的位置使用 Eclipse IDE,然后按照下面的步骤来创建一个 Spring 应用程序:

步骤描述
1创建一个名称为 SpringExample 的项目,并且在创建项目的 src 文件夹中创建一个包 com.tutorialspoint
2使用 Add External JARs 选项,添加所需的 Spring 库,解释见 Spring Hello World Example 章节。
3在 com.tutorialspoint 包中创建 Java 类 HelloWorldInitHelloWorld 和 MainApp
4在 src 文件夹中创建 Beans 配置文件 Beans.xml
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.");}
}

这是实现 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 类中声明的关闭 hook 的 registerShutdownHook()方法。它将确保正常关闭,并且调用相关的 destroy 方法。

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/beanshttp://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.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/326707.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python3 爬虫例子_如何让你写的爬虫速度像坐火箭一样快【并发请求】

开坑个新系列&#xff0c;主要面向新手&#xff0c;老司机可以忽略。这个系列内的文章将会让你知道如何做到让你写的爬虫在运行的时候速度能像火箭一样快&#xff01;很多初学爬虫的朋友对于这方面的知识似乎是空白的&#xff0c;甚至还有一些在爬虫岗位上工作了一两年的人也搞…

二叉排序树的删除+图解

图解 第一种情况 第二种情况 第三种情况 代码实现 package com.atguigu.binarysorttree;import com.sun.javafx.sg.prism.NGImageView; import javafx.scene.transform.Rotate;import java.io.InputStream; import java.util.Timer;/*** 创建人 wdl* 创建时间 2021/3/29* 描述…

如何一秒钟从头构建一个 ASP.NET Core 中间件

前言 其实地上本没有路&#xff0c;走的人多了&#xff0c;也便成了路。 -- 鲁迅 就像上面鲁迅说的那样&#xff0c;其实在我们开发中间件的过程中&#xff0c;微软并没有制定一些策略或者文档来约束你如何编写一个中间件程序&#xff0c; 但是其中却存在者一些最佳实践的方法&…

Spring Bean 定义继承

转载自 Spring Bean 定义继承 Bean 定义继承 bean 定义可以包含很多的配置信息&#xff0c;包括构造函数的参数&#xff0c;属性值&#xff0c;容器的具体信息例如初始化方法&#xff0c;静态工厂方法名&#xff0c;等等。 子 bean 的定义继承父定义的配置数据。子定义可以…

ssm(Spring+Spring mvc+mybatis)

在不久的之前我写了一篇ssh(SpringSpring mvchibernate)的文章&#xff0c;感兴趣的可以去这里看看~ 今天我来写一下ssm的增删改欧查案例&#xff1a; 数据库&#xff1a;mysql 浏览器&#xff1a;火狐浏览器 jdk&#xff1a;1.7 开发编辑器&#xff1a;myeclipse10.5 首…

grub shell 错误_使用grub-install修复Grub时出错

你的位置:问答吧-> Debian-> 问题详情使用grub-install修复Grub时出错WinXPDebian双系统&#xff0c;由于误操作导致开机后无法进入系统&#xff0c;错误信息为&#xff1a;GRUB Loading stage1.5.GRUB loading,please wait...error 22按照网上的说法&#xff0c;使用启动…

C# winform程序免安装.net framework在XP/win7/win10环境运行

前文&#xff1a; 首先感谢群里的大神宇内流云 提供的anyexec for windows版本。 经过本人搭建虚拟机在xp环境 使用anyexec运行winfrom程序后&#xff0c;测试通过,如下是用的xp运行winfrom程序的部分截图 下面是n年前入坑C#写的winform。。。玩毒奶粉用的&#xff0c;勿喷。 .…

ssm(Spring+Spring mvc+mybatis)实体类——Dept

package org.entity;/**.* * * 项目名称&#xff1a;test_ssm_16qn3 * 类名称&#xff1a;Dept * 类描述&#xff1a; 部门表实体类 * 创建人&#xff1a;Mu Xiongxiong * 创建时间&#xff1a;2017-12-26 下午8:30:55 * 修改人&#xff1a;Mu Xiongxiong …

Spring 基于构造函数的依赖注入

转载自 Spring 基于构造函数的依赖注入 Spring 基于构造函数的依赖注入 当容器调用带有一组参数的类构造函数时&#xff0c;基于构造函数的 DI 就完成了&#xff0c;其中每个参数代表一个对其他类的依赖。 示例&#xff1a; 下面的例子显示了一个类 TextEditor&#xff0c…

AVL树双旋转+图解

图解 代码实现 package com.atguigu.avl; /*** 创建人 wdl* 创建时间 2021/3/30* 描述*/ public class AVLTreeDemo {public static void main(String[] args) { // int[] arr{4,3,6,5,7,8};//创建一个AVLTree对象 // int arr[]{10,12,8,9,7,6};int[] arr{10,11…

ssm(Spring+Spring mvc+mybatis)Dao接口——IDeptDao

package org.dao;import java.util.List;import org.entity.Dept;/*** * * 项目名称&#xff1a;test_ssm_16qn3 * 类名称&#xff1a;IDeptDao * 类描述&#xff1a; 部门表的接口 * 创建人&#xff1a;Mu Xiongxiong * 创建时间&#xff1a;2017-12-26 下午8:…

Spring 基于设值函数的依赖注入

Spring 基于设值函数的依赖注入 当容器调用一个无参的构造函数或一个无参的静态 factory 方法来初始化你的 bean 后&#xff0c;通过容器在你的 bean 上调用设值函数&#xff0c;基于设值函数的 DI 就完成了。 示例&#xff1a; 下述例子显示了一个类 TextEditor&#xff0c…

[SSCore] 开源dotnet core 版本 SuperSocket

前言碎语 最近一直在做旧版本dotnet 程序迁移至dotnet core的工作, 非常欣慰dotnet社区的蓬勃发展, 目前大部分的第三方类库或开源代码都有了dotnet core版本 或者可以方便的找到替代方案. 这其中我唯一觉得遗憾的是dotnet 社区大名鼎鼎的socket 通讯框架SuperSocket SuperSock…

字母图形

资源限制 时间限制&#xff1a;1.0s 内存限制&#xff1a;256.0MB 问题描述 利用字母可以组成一些美丽的图形&#xff0c;下面给出了一个例子&#xff1a; ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC 这是一个5行7列的图形&#xff0c;请找出这个图形的规律&#xff0c;并…

Spring 注入内部 Beans

转载自 Spring 注入内部 Beans 注入内部 Beans 正如你所知道的 Java 内部类是在其他类的范围内被定义的&#xff0c;同理&#xff0c;inner beans 是在其他 bean 的范围内定义的 bean。因此在 或 元素内 元素被称为内部bean&#xff0c;如下所示。 <?xml version"…

asp.net core mvc剖析:KestrelServer

KestrelServer是基于Libuv开发的高性能web服务器&#xff0c;那我们现在就来看一下它是如何工作的。在上一篇文章中提到了Program的Main方法&#xff0c;在这个方法里Build了一个WebHost&#xff0c;我们再来看一下代码&#xff1a; public static void Main( string [] args) …

ssm(Spring+Spring mvc+mybatis)Dao层实现类——DeptDaoImpl

/** * Title: DeptDaoImpl.java * Package org.dao.impl * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-12-26 下午9:02:32 * version V1.0 */ package org.dao.impl;import java.util.List;import org.dao.IDeptDao…

win 7 mysql 1067_win7系统登陆MySQL服务出现1067错误的解决方法

很多小伙伴都遇到过win7系统登陆MySQL服务出现1067错误的困惑吧&#xff0c;一些朋友看过网上零散的win7系统登陆MySQL服务出现1067错误的处理方法&#xff0c;并没有完完全全明白win7系统登陆MySQL服务出现1067错误是如何解决的&#xff0c;今天小编准备了简单的解决办法&…

图的快速入门

快速入门案例 代码实现 package com.atguigu.graph;import java.util.ArrayList; import java.util.Arrays;/*** 创建人 wdl* 创建时间 2021/4/2* 描述*/ public class Graph {private ArrayList<String> vertexList;//存储顶点集合private int[][] edges;//存储图对应的…

Spring 注入集合

转载自 Spring 注入集合 注入集合 你已经看到了如何使用 value 属性来配置基本数据类型和在你的 bean 配置文件中使用<property>标签的 ref 属性来配置对象引用。这两种情况下处理奇异值传递给一个 bean。 现在如果你想传递多个值&#xff0c;如 Java Collection 类…