spring中基于BeanPostProcessor动态替换指定的bean
来源:互联网 发布:java string 中文乱码 编辑:程序博客网 时间:2024/05/20 12:25
现在每个系统开发集成的开发框架和公用组件都太多了,而且每个组件都是用自己的配置,比如我们现在使用的一个单点登陆系统就是采用spring来配置管理的。其核心bean定义文件被打包在jar包中,当我们想替换其中的某一个bean定义时,又不太好直接修改bean定义文件,那样会导致框架维护混乱。这里,我们就可以使用spring中的bean前后处理器来进行动态替换,先说明场景哈。
有一个jar包,包含了一个xml文件,定义了自身的一系列bean。另外一个项目使用了这个jar包,但又想替换其中的一个bean,原来默认的bean是用配置文件来读取信息,但现在想改成数据库的模式。常规的方法是:
1、将xml文件拿出来,修改bean定以后再放到jar包内替换以前的;
2、直接将xml文件拿出来,删除jar包中的,并将新的xml文件放在项目的classpath中
这两个方法虽然可以解决问题,但不利于jar包本身的维护,如果升级了,那项目的改动就比较麻烦。这里,我们其实完全可以采用spring的BeanPostProcessor来动态替换。
假设jar包中定义的xml文件中一个包含的bean定义如下:
<bean id="aa" class="cc.mzone.config.DefaultConfigImpl"> ...</bean>
其中DefaultConfigImpl这个bean就是我们要替换的对象,我们可以写如下的类:
public class MyConfigImpl extends DefaultConfigImpl implements BeanPostProcessor { @Override public Object postProcessAfterInitialization(Object bean, String beanName)throws BeansException { return bean; } @Override public Object postProcessBeforeInitialization(Object bean, String beanName)throws BeansException { if (beanName.equals("defaultcfg")) { // do something return this; } return bean; }}
注意我们继承了原始的DefaultConfigImpl,当然你也可以不继承,单独再写一个也可以。同时实现了spring中的BeanPostProcessor,这个类是spring容器级别的处理器,可以在bean初始化前后做一些时间(这里的初始化不是指类的初始化,而是相对bean的属性设置而言的)。可以看到我们在postProcessBeforeInitialization这个方法中对bean名称为defaultcfg的bean进行特殊处理,这里我们是直接返回当前bean作为替换实例,从而也就实现了动态替换指定bean的效果,同时也不破坏原始的组件架构,可谓一举两得。
- spring中基于BeanPostProcessor动态替换指定的bean
- spring中基于BeanPostProcessor动态替换指定的bean
- spring中基于BeanFactoryAware动态替换指定的bean
- spring bean 动态替换
- spring 笔记5 bean的生命周期,BeanPostProcessor
- 基于Spring容器Bean的动态注入
- spring后处理bean,BeanPostProcessor
- Spring BeanPostProcessor执行时机和Bean的初始化时机总结
- Spring中BeanPostProcessor
- Spring中BeanPostProcessor
- Spring中BeanPostProcessor
- Spring中BeanPostProcessor
- Spring中BeanPostProcessor
- Spring中BeanPostProcessor
- Spring中BeanPostProcessor
- Spring中BeanPostProcessor
- Spring中BeanPostProcessor
- 动态设定Spring中bean的属性
- object-c 类别
- C# VS2010 制作软件安装包
- windows phone7开发环境搭建
- PS and TS
- 软件工程三:软件需求分析概要图
- spring中基于BeanPostProcessor动态替换指定的bean
- 一份比较详细的DOS命令说明!(转载)
- 解决 struts2 配置文件不自动提示
- 中断编程
- Android中关于Logcat的几个问题
- SD MEMORY CARD SYSTEM CONCEPT
- 第一篇博客
- Proxool 连接池 配置 实例
- ARM 的DCD指令