您的位置:首页 > 编程语言 > Java开发

Xbean介绍与Spring的整合

2016-03-10 11:06 666 查看

前言

最近在编写一个校园框架,很多的配置需要使用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文件热加载代码实现》

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: