博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring中Bean的后置处理器
阅读量:7232 次
发布时间:2019-06-29

本文共 3636 字,大约阅读时间需要 12 分钟。

以下内容引用自:

Bean后置处理器

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

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

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

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

例子:

pom.xml:

4.0.0
com.jsoft.testspring
testbeanpostprocessor
0.0.1-SNAPSHOT
jar
testbeanpostprocessor
http://maven.apache.org
UTF-8
junit
junit
3.8.1
test
org.springframework
spring-core
4.1.4.RELEASE
org.springframework
spring-context
4.1.4.RELEASE

HelloWorld.java:

package com.jsoft.testspring.testbeanpostprocessor;public class HelloWorld {    private String messageString;        public void setMessage(String message){        this.messageString = message;    }        public void getMessage(){        System.out.println(this.messageString);    }        public void initCustom(){        System.out.println("初始化");    }        public void destroyCustom(){        System.out.println("销毁");    }    }

InitHelloWorld.java:

package com.jsoft.testspring.testbeanpostprocessor;import org.springframework.beans.BeansException;import org.springframework.beans.factory.config.BeanPostProcessor;public class InitHelloWorld implements BeanPostProcessor {    public Object postProcessAfterInitialization(Object arg0, String arg1)            throws BeansException {        // TODO Auto-generated method stub        System.out.println("After HelloWorld");        return arg0;    }    public Object postProcessBeforeInitialization(Object arg0, String arg1)            throws BeansException {        // TODO Auto-generated method stub        System.out.println("Before HelloWorld");        return arg0;    }}

这是实现BeanPostProcessor非常简单的例子,它在任何bean的初始化的之前和之后输入该bean的名称。你可以在初始化bean的之前和之后实现更复杂的逻辑,因为你有两个访问内置bean对象的后置处理程序的方法。

beans.xml:

App.java:

package com.jsoft.testspring.testbeanpostprocessor;import org.springframework.context.support.AbstractApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;/** * Hello world! * */public class App {    public static void main( String[] args )    {        AbstractApplicationContext abstractApplicationContext = new ClassPathXmlApplicationContext("beans.xml");        HelloWorld helloWorld = (HelloWorld)abstractApplicationContext.getBean("helloWorld");        helloWorld.getMessage();        abstractApplicationContext.registerShutdownHook();    }}

在这里,你需要注册一个在AbstractApplicationContext类中声明的关闭hook的registerShutdownHook()方法。它将确保正常关闭,并且调用相关的destroy方法。

测试结果:

总结:

InitHelloWorld类集成自BeanPostProcessor,然后在bean中指定class为InitHelloWorld即可,这里分开写主要是为了展示两个方法的效果,当然这个类的两个方法可以直接写在HelloWorld中,直接在HelloWorld类中集成BeanPostProcessor,然后去实现两个方法。

 

测试工程:

==>如有问题,请联系我:easonjim#163.com,或者下方发表评论。<==

转载地址:http://dcvfm.baihongyu.com/

你可能感兴趣的文章
android: ADB错误“more than one device and emulator”
查看>>
作为一个测试leader平时应该注意哪些方面
查看>>
字符和字符串
查看>>
Notice: Only variable references should be returned by reference(PHP版本兼容性问题)
查看>>
Windows 之 win10快捷键
查看>>
Entity Framework 并发处理
查看>>
使用Xamarin.Forms平台开发移动应用指南
查看>>
Oracle使用小记
查看>>
oracle去除字符串中间的空格
查看>>
【C语言入门教程】4.10 综合实例 - 媒体播放器
查看>>
剖析信用卡 DCC 交易
查看>>
javascript中的链表结构
查看>>
微信开发-ACCESS TOKEN 过期失效解决方案
查看>>
ORACLE的SQL JOIN方式小结
查看>>
AngularJS中使用的表单验证
查看>>
某硕笔试题mysql数据库部分(较为全面)
查看>>
MS SQL巡检系列——检查重复索引
查看>>
[AngularJS] Write a simple Redux store in AngularJS app
查看>>
CentOS修改mysql 用户root的密码并允许远程登录
查看>>
Atitit usrqbg1821 Tls 线程本地存储(ThreadLocal Storage 规范标准化草案解决方案ThreadStatic...
查看>>