使用 struts 组件 Digester 实现 spring 中对 bean 的管理的类似的功能.<o:p></o:p>
Beans.xml的定义:<o:p></o:p>
< ?xml version="1.0" encoding="UTF-8"? ><o:p></o:p>
< beans ><o:p></o:p>
< bean id="conn" type="dao.Conn"/><o:p></o:p>
< bean id="id1" type="dao.dao1"/><o:p></o:p>
< /beans ><o:p></o:p>
<o:p> </o:p>
Beans.java<o:p></o:p>
package testDigester.myTest1;<o:p></o:p>
<o:p> </o:p>
import java.util.HashMap;<o:p></o:p>
<o:p> </o:p>
public class Beans {<o:p></o:p>
<o:p> </o:p>
private HashMap beans = new HashMap();<o:p></o:p>
<o:p> </o:p>
/**<o:p></o:p>
* @ return beansを戻します<o:p></o:p>
*/<o:p></o:p>
public HashMap getBeans() {<o:p></o:p>
return beans;<o:p></o:p>
}<o:p></o:p>
<o:p> </o:p>
/**<o:p></o:p>
* @ param beansを設定します<o:p></o:p>
*/<o:p></o:p>
public void setBeans(HashMap beans) {<o:p></o:p>
this.beans = beans;<o:p></o:p>
}<o:p></o:p>
/**<o:p></o:p>
* the beans can not contain same keys,so <o:p></o:p>
* we hava to try, this will be done later<o:p></o:p>
* @ author pony<o:p></o:p>
*/<o:p></o:p>
<o:p> </o:p>
public void addBean(Bean bean){<o:p></o:p>
this.getBeans().put(bean.getId(),bean);<o:p></o:p>
}<o:p></o:p>
<o:p> </o:p>
/**<o:p></o:p>
* get Bean by id<o:p></o:p>
*/<o:p></o:p>
public Bean findBean(String id){<o:p></o:p>
return (Bean)this.getBeans().get(id);<o:p></o:p>
}<o:p></o:p>
}<o:p></o:p>
<o:p> </o:p>
<o:p>
</o:p>
Bean.java<o:p></o:p>
package testDigester.myTest1;<o:p></o:p>
<o:p> </o:p>
public class Bean {<o:p></o:p>
<o:p> </o:p>
private String id;<o:p></o:p>
private String type;<o:p></o:p>
<o:p></o:p>
/**<o:p></o:p>
* @ return Returns the id.<o:p></o:p>
*/<o:p></o:p>
public String getId() {<o:p></o:p>
return id;<o:p></o:p>
}<o:p></o:p>
/**<o:p></o:p>
* @ param id The id to set.<o:p></o:p>
*/<o:p></o:p>
public void setId(String id) {<o:p></o:p>
this.id = id;<o:p></o:p>
}<o:p></o:p>
/**<o:p></o:p>
* @ return Returns the type.<o:p></o:p>
*/<o:p></o:p>
public String getType() {<o:p></o:p>
return type;<o:p></o:p>
}<o:p></o:p>
/**<o:p></o:p>
* @ param type The type to set.<o:p></o:p>
*/<o:p></o:p>
public void setType(String type) {<o:p></o:p>
this.type = type;<o:p></o:p>
} <o:p></o:p>
}<o:p></o:p>
<o:p> </o:p>
ParseRule.java<o:p></o:p>
package testDigester.myTest1;<o:p></o:p>
<o:p> </o:p>
import org.apache.commons.digester.Digester;<o:p></o:p>
import org.apache.commons.digester.RuleSetBase;<o:p></o:p>
/ / 用来制定规则<o:p></o:p>
/ / 下面的RuleSetBase必须继承<o:p></o:p>
public class ParseRule extends RuleSetBase{<o:p></o:p>
public void addRuleInstances(Digester d) {<o:p></o:p>
//第一次遇到匹配的beans时,建立一个Beans对象,并放入栈顶<o:p></o:p>
d.addObjectCreate("beans",Beans.class);<o:p></o:p>
//复制第一个beans对象的attribute属性<o:p></o:p>
d.addSetProperties("beans");<o:p></o:p>
//第一次遇到匹配的beans/bean时,建立一个Bean对象,并放入栈顶<o:p></o:p>
d.addObjectCreate("beans/bean",Bean.class);<o:p></o:p>
//复制bean对象的attribute属性<o:p></o:p>
d.addSetProperties("beans/bean");<o:p></o:p>
//以后遇到匹配的"beans/bean",使用了addBean方法处理<o:p></o:p>
d.addSetNext("beans/bean","addBean");<o:p></o:p>
}<o:p></o:p>
}<o:p></o:p>
<o:p></o:p>
<o:p> </o:p>
<o:p>
</o:p>
BeanParser.java<o:p></o:p>
package testDigester.myTest1;<o:p></o:p>
<o:p> </o:p>
import java.io.IOException;<o:p></o:p>
import java.io.InputStream;<o:p></o:p>
import java.sql.ResultSet;<o:p></o:p>
import java.sql.SQLException;<o:p></o:p>
<o:p> </o:p>
import org.apache.commons.digester.Digester;<o:p></o:p>
import org.xml.sax.SAXException;<o:p></o:p>
<o:p> </o:p>
import dao.Conn;<o:p></o:p>
<o:p> </o:p>
public class BeanParser {<o:p></o:p>
<o:p> </o:p>
/**<o:p></o:p>
* @ author pony<o:p></o:p>
*/<o:p></o:p>
InputStream is = null;<o:p></o:p>
<o:p> </o:p>
public BeanParser() {<o:p></o:p>
is = this.getClass().getClassLoader().getResourceAsStream(<o:p></o:p>
"testDigester/myTest1/beans.xml");<o:p></o:p>
}<o:p></o:p>
<o:p> </o:p>
public static void main(String[] args) {<o:p></o:p>
<o:p> </o:p>
test2();<o:p></o:p>
<o:p> </o:p>
}<o:p></o:p>
public Object getBean(String id) {<o:p></o:p>
<o:p> </o:p>
if (is == null) {<o:p></o:p>
System.out.println("no configuration is found");<o:p></o:p>
}<o:p></o:p>
Bean bean = null;<o:p></o:p>
String type = "";<o:p></o:p>
Digester digester = new Digester();<o:p></o:p>
ParseRule rule = new ParseRule();<o:p></o:p>
rule.addRuleInstances(digester);<o:p></o:p>
<o:p> </o:p>
Beans beans = null;<o:p></o:p>
try {<o:p></o:p>
beans = (Beans) digester.parse(is);<o:p></o:p>
bean = beans.findBean(id);<o:p></o:p>
type = bean.getType();<o:p></o:p>
} catch (IOException e) {<o:p></o:p>
e.printStackTrace();<o:p></o:p>
} catch (SAXException e) {<o:p></o:p>
e.printStackTrace();<o:p></o:p>
}<o:p></o:p>
<o:p> </o:p>
return makeInstance(type);<o:p></o:p>
}<o:p></o:p>
<o:p> </o:p>
public Object makeInstance(String type) {<o:p></o:p>
Object obj = (Object) null;<o:p></o:p>
if (type == null) {<o:p></o:p>
return (Object) null;<o:p></o:p>
}<o:p></o:p>
try {<o:p></o:p>
obj = Class.forName(type).newInstance();<o:p></o:p>
} catch (ClassNotFoundException e) {<o:p></o:p>
System.out.println("no class is found");<o:p></o:p>
e.printStackTrace();<o:p></o:p>
} catch (IllegalAccessException e) {<o:p></o:p>
e.printStackTrace();<o:p></o:p>
} catch (InstantiationException e) {<o:p></o:p>
e.printStackTrace();<o:p></o:p>
}<o:p></o:p>
System.out.println(obj.getClass());<o:p></o:p>
return obj;<o:p></o:p>
}<o:p></o:p>
public static void test2() {<o:p></o:p>
BeanParser parser = new BeanParser();<o:p></o:p>
Conn conn = (<st1:state><st1:place>Conn</st1:place></st1:state>) parser.getBean("conn");<o:p></o:p>
if (conn != null) {<o:p></o:p>
ResultSet rs = conn.executeQuery("SELECT * FROM AMMM");<o:p></o:p>
try {<o:p></o:p>
while (rs.next()) {<o:p></o:p>
System.out.println(rs.getBigDecimal("id").toString());<o:p></o:p>
}<o:p></o:p>
} catch (SQLException e) {<o:p></o:p>
e.printStackTrace();<o:p></o:p>
}<o:p></o:p>
} else {<o:p></o:p>
System.out.println("connection error!");<o:p></o:p>
}<o:p></o:p>
}<o:p></o:p>
}<o:p></o:p>
分享到:
相关推荐
Digester是Apache软件基金会下的Jakarta项目中的一个Java库,主要用于简化XML到Java对象的映射过程。在处理XML文档时,它通过匹配XML元素结构到相应的Java对象的方法调用,实现了XML解析的自动化。这个工具对于那些...
赠送jar包:commons-digester3-3.2.jar; 赠送原API文档:commons-digester3-3.2-javadoc.jar; 赠送源代码:commons-digester3-3.2-sources.jar; 赠送Maven依赖信息文件:commons-digester3-3.2.pom; 包含翻译后...
Digester是Apache软件基金会的Jakarta项目中的一个实用工具库,它主要用来解析XML文档,并根据预定义的规则自动创建和配置Java对象。这个工具在处理XML到Java对象映射时,极大地简化了代码,避免了手动解析XML的繁琐...
Castor和Digester是两个在Java开发中用于对象与XML数据之间进行映射的库,它们简化了XML数据的解析和对象的序列化过程。在本文中,我们将深入探讨这两个库,以及如何通过实例来使用它们。 首先,让我们了解Castor。...
`commons-digester.jar`是Apache Commons项目中的一个组件,主要功能是解析XML文档并根据预定义的规则自动创建和填充Java对象。这个组件在Java应用程序中尤其有用,特别是那些需要从XML配置文件中构建复杂对象层次...
Java中的Digester库是Apache Commons项目的一部分,它提供了一种方便的方式来解析XML文档,并将解析结果映射到Java对象模型上。这个库特别适合于创建简单的XML到Java对象的映射,而不需要编写大量的手动解析代码。在...
`commons-digester-2.1.jar` 是Apache Commons项目中的一个组件,主要负责XML文档的解析和对象的创建与绑定。Apache Commons Digester库提供了一种规则驱动的方法来解析XML文档,并根据预定义的规则将XML数据映射到...
《digester深度解析》 Java世界中,XML作为数据交换和配置文件的常用格式,其解析和对象绑定是一项常见的任务。Apache Commons Digester是Apache软件基金会提供的一个强大的工具,专门用于将XML文档解析为Java对象...
标题“利用commons-digester解析XML”涉及到的是Java开发中的一种处理XML文档的工具——Apache Commons Digester。这个库提供了一种方便的方式来映射XML文档结构到Java对象,从而简化了XML数据的处理过程。 Apache ...
《使用Digester解析XML的深度指南》 在Java开发中,处理XML文件是常见的任务,而Apache Commons Digester库提供了一种高效且便捷的方式来解析XML并将其映射到Java对象。本教程将深入探讨如何使用Digester来读取XML...
在Java开发中,Apache Commons Digester是一个非常有用的库,它允许开发者通过XML配置来实例化、配置和关联Java对象。 Digester提供了两种主要的解析方式,即规则硬编码和独立的规则文件,这两种方法各有其特点和...
### Digester组件简化XML文件处理操作 #### 一、引言 随着Web技术的发展,XML作为数据交换格式的重要性日益凸显。然而,对于大型且复杂的XML文档进行解析与处理时,传统的方法如DOM(Document Object Model)和SAX...
本文将深入探讨如何使用Apache的 Digester 库来解析XML文档,这是一款强大的工具,能够将XML数据映射到Java对象,简化了处理XML的过程。 Digester 是Apache Commons项目的一部分,它提供了一种规则驱动的方法来处理...
赠送jar包:commons-digester3-3.2.jar; 赠送原API文档:commons-digester3-3.2-javadoc.jar; 赠送源代码:commons-digester3-3.2-sources.jar; 赠送Maven依赖信息文件:commons-digester3-3.2.pom; 包含翻译后...
《digester3.2源码解析与应用实例》 Apache Digester是一个强大的Java库,用于在XML文档和Java对象之间建立映射关系,通过规则来自动解析XML并创建或更新对象结构。在digester3.2版本中,我们能够深入理解其内部...
在Java开发中,Struts框架提供了一个强大的工具——Digester,用于解析XML文件并自动创建、配置Java对象。本文将详细介绍如何使用Digester处理具有嵌套结构的XML文档,并通过一个具体的实例——"DigesterXmlTest"来...
### 使用Apache Commons Digester开发指南 #### 概述 Apache Commons Digester 是一款基于 Java 的开源库,专门用于简化 XML 文件解析的过程。它利用 SAX(Simple API for XML)解析器来解析 XML 数据,并通过一...
Digester 是 Apache Commons 中的一个工具类库,它用于解析 XML 文档,并根据预先定义的规则自动创建和配置 Java 对象。在上述问题中,我们看到一个 XML 文档表示了一个考试,其中包含了多个题目,每个题目有其编号...
### Digester 实例详解 #### 一、Digester 概述 Digester 是一个非常实用且功能强大的 XML 解析工具,它属于 Jakarta 开源项目下的 Commons 子项目之一。通过 Digester,开发者能够轻松地解析复杂的 XML 文件,而...
Digester不是一个XML Parser,它只是对SAX更高层次上的一个封装使用Digester,将XML映射成javaBean. 我们无须了解SAX和DOM的解析过程,只要给Digester添加一些解析规则,就能对一个xml文件进行解析。Digester使用...