Xbean介绍与Spring的整合

来源:互联网 发布:重生之美国仓储淘宝王 编辑:程序博客网 时间:2024/04/30 10:38

前言

最近在编写一个校园框架,很多的配置需要使用XML文件去定义。例如:我要创建某一个bean实体,虽然是可以用一般的bean去定义,但是Spring中bean的定义有时候非常的不方便。刚好在公司的wiki中发现一个xbean的开源程序,听说很久已经不更新了,在百度中能找到的博客也不多。也没有对Spring整合的说明,花了一点时间去研究了一下xbean,顺便整合到Spring中。在这里写一篇博客记录记录。

xbean一些简单的介绍我决定交给另外两篇对我帮助很大的博客,不重复造轮子了,读这篇博客前,最好先了解另外两篇对xbean作介绍的文章。

Apache XBean 简单介绍

Geronimo XBean


关键代码分析
如下面的代码:xbean扩展了Spring原生的XmlWebApplicationContext。也就是说,要顺利地在Spring中使用xbean对xml文件作解析,现在在web.xml重新定义XmlWebApplication的类。
由于这是由xbean扩展下来的,所以,这个类一定也完全可以替代原有的XmWebApplication,根据设计模式的里氏替换原则得知。

package org.apache.xbean.spring.context;import java.io.IOException;....省略n多个class/* * xbean扩展了Spring原生的XmlWebApplicationContext */public class XmlWebApplicationContext extends org.springframework.web.context.support.XmlWebApplicationContext

在web.xml文件中更换contextClass解析器

<context-param>        <param-name>contextClass</param-name>            <param-value> org.apache.xbean.spring.context.XmlWebApplicationContext         </param-value>  </context-param>

至此,xbean已经可以在Spring项目中跑起来了。


一个简单的测试

在这里,我们可以做一个简单的测试。我们编写一个实现BeanPostProcessor接口的类求拦截每一个bean的生成,假如检测到xbean生成的bean(我们可以指定xbean生成的LoginUser类),我们打印出来。
/** * declaration:  *      用于测试Xbean工作效果的一个processer * author wenkangqiang * date   2016年3月5日 */public class XbeanTestProcesser implements BeanPostProcessor {    @Override    public Object postProcessAfterInitialization(Object bean, String beanName)            throws BeansException {        if (bean instanceof LoginUser){            System.out.println("从xml文件中读取到bean" + ((LoginUser)bean).toString());        }        return bean;    }    @Override    public Object postProcessBeforeInitialization(Object bean, String beanName)            throws BeansException {        // TODO Auto-generated method stub        return bean;    }}

在Spring的ApplicationContext.xml中配置一下这个bean。然后它就会工作了,有关BeanPostProcessor接口的知识可以自己了解一下。可以理解为bean生成过程中的拦截器。

<bean class="com.cn.qpm.framework.processor.XbeanTestProcesser" /> 

应用上Xbean的xml文件

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://xbean.apache.org/schemas/spring/1.0"      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:qpm="http://model.usermanage.qpm.cn.com/loginuser"      xsi:schemaLocation="http://xbean.apache.org/schemas/spring/1.0 classpath:/org/apache/xbean/spring/spring-beans.xsd">      <qpm:LoginUser id="testuser123" userid="123" name="wenkangqiang"         email="945766863@qq.com" password="55555" authority="10"></qpm:LoginUser>    <qpm:LoginUser id="testuser123455" userid="234" name="wenkangqiang222"></qpm:LoginUser></beans>  

效果

测试的效果:每一个生成的LoginUser都可以顺利地被打印出来。大家可以自己进行一下测试。

后记

xbean对于我们进行自定义框架的时候是非常有用的,结合我另外一篇博客去进行实现时,这样的开发模式是我觉得还是挺好的。这样我们可以在xml基础上作更多的扩展。

《Spring项目中对XML文件热加载代码实现》

0 0