首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>编程开发>java>Java基础>正文

spring 2.0自定义xml 标记 (二 如何实现)

http://www.oklinux.cn  2008-01-20  来源: ccidnet baocl  会员收藏  游客收藏  【 】 

看了spring test 用例,其实实现这一功能还算比较简单,主要分以下的步骤,具体的实例可以去参考spring 自带的testcase

首先定义相关xsd文件,用于验证相应的行为:

主要增加了4个自定义元素和1个属性:

xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.springframework.org/schema/beans/test"
elementFormDefault="qualified">













接着定义handler映射文件:customNamespace.properties

http\://www.springframework.org/schema/beans/test=org.springframework.beans.factory.xml.support.TestNamespaceHandler

定义Handler:

主要注册相应的解析类和装饰类

publicclass TestNamespaceHandler extends NamespaceHandlerSupport {

publicvoid init() {

//相对于每个xsd中定义的元素

registerBeanDefinitionParser("testBean", new TestBeanDefinitionParser());

registerBeanDefinitionDecorator("set", new PropertyModifyingBeanDefinitionDecorator());

registerBeanDefinitionDecorator("debug", new DebugBeanDefinitionDecorator());

registerBeanDefinitionDecorator("nop", new NopInterceptorBeanDefinitionDecorator());

registerBeanDefinitionDecoratorForAttribute("object-name", new ObjectNameBeanDefinitionDecorator());

}

}

定义各个解析类:

privatestaticclass TestBeanDefinitionParser implements BeanDefinitionParser {

public BeanDefinition parse(Element element, ParserContext parserContext) {

RootBeanDefinition definition = new RootBeanDefinition();

definition.setBeanClass(TestBean.class);

MutablePropertyValues mpvs = new MutablePropertyValues();

mpvs.addPropertyValue("name", element.getAttribute("name"));

mpvs.addPropertyValue("age", element.getAttribute("age"));

definition.setPropertyValues(mpvs);

parserContext.getRegistry().registerBeanDefinition(element.getAttribute("id"), definition);

returnnull;

}

}

privatestaticclassPropertyModifyingBeanDefinitionDecorator implements BeanDefinitionDecorator {

public BeanDefinitionHolder decorate(Node node, BeanDefinitionHolder definition,

ParserContext parserContext) {

Element element = (Element)node;

BeanDefinition def = definition.getBeanDefinition();

MutablePropertyValues mpvs = (def.getPropertyValues() == null) ?

new MutablePropertyValues() : def.getPropertyValues();

mpvs.addPropertyValue("name", element.getAttribute("name"));

mpvs.addPropertyValue("age", element.getAttribute("age"));

((AbstractBeanDefinition) def).setPropertyValues(mpvs);

return definition;

}

}

privatestaticclassDebugBeanDefinitionDecorator extends AbstractInterceptorDrivenBeanDefinitionDecorator {

protected BeanDefinition createInterceptorDefinition(Node node) {

returnnew RootBeanDefinition(DebugInterceptor.class);

}

}

privatestaticclassNopInterceptorBeanDefinitionDecorator extends

AbstractInterceptorDrivenBeanDefinitionDecorator {

protected BeanDefinition createInterceptorDefinition(Node node) {

returnnew RootBeanDefinition(NopInterceptor.class);

}

}

privatestaticclassObjectNameBeanDefinitionDecorator implements BeanDefinitionDecorator {

public BeanDefinitionHolder decorate(Node node, BeanDefinitionHolder definition,

ParserContext parserContext) {

Attr objectNameAttribute = (Attr)node;

definition.getBeanDefinition().setAttribute("objectName", objectNameAttribute.getValue());

return definition;

}

}

可以定义EntityResolver,用于验证相应的xsd

privateclass DummySchemaResolver extends PluggableSchemaResolver {

public DummySchemaResolver() {

super(CustomNamespaceHandlerTests.this.getClass().getClassLoader());

}

public InputSource resolveEntity(String publicId, String systemId) throws IOException {

InputSource source = super.resolveEntity(publicId, systemId);

共2页: 上一页 1 [2] 下一页

上一篇:J2EE:用RMI和CORBA进行分布式Java编程   下一篇:J2EE基础--weblogic的几个基础问题


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·spring 2.0自定义xml 标记 (一 相关类)
·Java高级:J2ME平台中几个重要概念的说明
·JAVA企业应用:软件工程之Java实现策略
·JAVA进阶--对象的序列化和反序列化实践
·Hibernate编写通用数据库操作代码演示
·JAVA基础:一个struts hibernate入门实例
·【Java语言深入】java 中线程概念描述
·JAVA进阶--使用Java进行Web开发的随想
·Java高级:怎样读取和处理XML的配置文件
·一个基于Java Socket实现文件传输示例
·EJB 3.0 的新规范概览及其未来发展方向
·JAVA高级--Java中异常机制的深入研究
·全面解析Java中的类和对象的初始化过程
·Java语言常用VI高级命令集锦
·一个非常有趣的使用spring框架AOP例子
·Java语言对象池技术的原理及其实现解析
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·Java入门:状态对象--数据库的替代者
·Java语言怎样调用外部应用程序
·Java语言深入--关于Java语言的内存泄漏
·JSP/Servlet/JSF:Servlet/JSP配置详解
·进阶-怎样使用AJAX进行WEB应用程序开发
·基础:J2ME程序开发之新手入门九大要点
·Java入门--Java语言接口与继承的本质
·JAVA进阶--如何提升JSP应用程序的效率
·对Java中四种XML解析技术之不完全测试
·编写高级 JScript应用代码
·JSP/Servlet/JSF--对标签库的深入研究
·Java入门--关于字符串分割的两种方法
  阅读排行
·使用AJAX技术实现网页无闪自动局部刷新
·快速教您Apache Tomcat SSL的配置
·Java语言深入--java调用C/C 的过程
·用JSP JavaScript打造二级级联下拉菜单
·JAVA进阶--线程运行栈信息的获取讲解
·使用WEBWORK实现文件上传方法实例详解
·J2SE综合--JAVA实现把汉字转化成拼音
·一个非常有趣的使用spring框架AOP例子
·关于java中相对路径,绝对路径问题总结
·高级:lucene全文检索应用示例及代码简
·详细讲解Struts构架中action的跳转大全
·在Weblogic上配置JMS服务的方法
·Hibernate配置文件中的映射元素详解
·对Java中四种XML解析技术之不完全测试
·在JSP环境中配置使用fckeditor详细讲解
网摘收藏: