Digester小试

使用 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>

你可能感兴趣的:(DAO,apache,spring,sql,bean)