详解Spring中Bean后置处理器(BeanPostProcessor)的使用
一、BeanPostProcessor接口
Bean后置处理:对Spring 工厂创建的对象进行二次加工处理,即预初始化和后初始化。
PostProcessor中文意思就是后置处理器。
BeanPostProcessor
接口也被称为Bean后置处理器,通过该接口可以自定义调用初始化前后执行的操作方法。
该接口中包含了两个方法:before方法(预初始化)和after方法(后厨是化)
postProcessBeforeInitialization()
方法:在 Bean 实例化、属性注入后,初始化前调用。
postProcessAfterInitialization()
方法:在 Bean 实例化、属性注入、初始化都完成后调用。
二、案例
创建User类,为了更好的观察bean周期执行流程,在类中添加无参构造器方法、setter注入方法、init()初始化方法和destory()销毁方法,并在方法中都输出一句话。代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | /** * 观察bean周期执行流程 */ public class User { String name; int age; //无参构造方法 public User() { System.out.println( "这是无参构造方法" ); } //setter方法 public void setName(String name) { System.out.println( "这是setter注入name" ); this .name = name; } public void setAge( int age) { System.out.println( "这是setter注入age" ); this .age = age; } //初始化回调方法 public void init() throws Exception { System.out.println( "这是初始化回调方法" ); } //销毁回调方法 public void destroy() throws Exception { System.out.println( "这是销毁回调方法" ); } //toString方法 @Override public String toString() { return "User{" + "name='" + name + '\ '' + ", age=" + age + '}' ; } } |
创建PostProcessor类,实现BeanPostProcessor接口
,并重写预初始化方法postProcessBeforeInitialization()
和后初始化方法postProcessAfterInitialization()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | /** * Spring Bean后置处理器 */ public class PostProcessor implements BeanPostProcessor { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { System.out.println(beanName+ "正在执行预初始化方法" ); return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { System.out.println(beanName+ "正在执行后初始化方法" ); return bean; } } |
编写spring配置文件,添加bean
1 2 3 4 5 6 7 | <!--添加user bean--> < bean id = "user" class = "com.bighorn.pojo.User" init-method = "init" destroy-method = "destroy" > < property name = "name" value = "bighorn" /> < property name = "age" value = "18" /> </ bean > <!-- 注册后置处理器 --> < bean id = "postProcessor" class = "com.bighorn.config.PostProcessor" /> |
编写运行程序
1 2 3 4 5 6 7 8 9 10 | public static void main(String[] args) { //获取 ClassPathXmlApplicationContext 容器 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( "applicationContext.xml" ); //从容器中获取对象 User user = context.getBean( "user" , User. class ); //使用bean System.out.println( "使用bean:" +user); //调用close方法关闭容器 context.close(); } |
运行结果如下,通过结果我们可以清晰地看到bean生命周期执行流程。
三、总结
实际开发中,spring bean初始化操作比较少,一般采用后置处理器加工bean。
后置处理器有两个方法:before和after方法。推荐使用after方法,即后初始化方法。
到此这篇关于详解Spring中Bean后置处理器(BeanPostProcessor)的使用的文章就介绍到这了,更多相关SpringBean后置处理器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

微信公众号搜索 “ 脚本之家 ” ,选择关注
程序猿的那些事、送书等活动等着你
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!
相关文章
SpringBoot默认包扫描机制及@ComponentScan指定扫描路径详解
这篇文章主要介绍了SpringBoot默认包扫描机制及@ComponentScan指定扫描路径详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-11-11MyEclipse如何将项目的开发环境与服务器的JDK 版本保持一致
我们使用MyEclipse开发Java项目开发中,偶尔会遇到因项目开发环境不协调,导致这样那样的问题,在这里以把所有环境调整为JDK1.6 为例,给大家详细介绍MyEclipse如何将项目的开发环境与服务器的JDK 版本保持一致,需要的朋友参考下吧2024-04-04Maven中plugins和pluginManagement区别小结
pluginManagement是表示插件声明,plugins就是直接引入一个plugin,本文主要介绍了Maven中plugins和pluginManagement区别小结,具有一定的参考价值,感兴趣的可以了解一下2024-06-06JSON序列化导致Long类型被搞成Integer的坑及解决
这篇文章主要介绍了JSON序列化导致Long类型被搞成Integer的坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-01-01
最新评论