动态创建和修改Spring的bean配置文件

开发 后端
今天本来打算写Spring温故知新系列的第二篇,不过突然想起一直都忘了学怎么用java来操作XML,这么重要的事情居然拖了这么久才想起来实在是太不应该了,于是今天就先练习一下用dom4j来操作XML。

今天本来打算写Spring温故知新系列的第二篇,不过突然想起一直都忘了学怎么用java来操作XML,这么重要的事情居然拖了这么久才想起来实在是太不应该了,于是今天就先练习一下用dom4j来操作XML。

其实dom4j这个库实在是太方便了,使用起来跟C#操作XML几乎没太大差别,也没什么难度,所以就先贴两段代码吧。

其中有几个要点:

1、如果只是创建一个XML文件,那么只需要导入dom4j-1.6.1.jar就可以了,路径如下:

spring-framework-2.5.6\lib\dom4j\dom4j-1.6.1.jar

如果是需要读取或者修改,那么就需要导入这个库内的另外一个文件:

spring-framework-2.5.6\lib\dom4j\jaxen-1.1-beta-7.jar

否则就会报错,报错内容如下:

java.lang.NoClassDefFoundError: org/jaxen/JaxenException

...

...

...

2、dom4j是支持链式操作的,这跟jQuery非常像。这样一来创建一个XML文件就非常方便而且代码结构看起来也更加清晰明了。

3、要学会XPath.... 要不然你会很痛苦,不过XPath其实很简单,应该花不了多少时间,难不住各位的,哈哈~

Action部分:

Java代码

  1. package com.iteye.bolide74.action;     
  2.     
  3. import java.io.File;     
  4. import java.io.FileWriter;     
  5. import java.io.IOException;     
  6. import java.util.List;     
  7.     
  8. import org.dom4j.Document;     
  9. import org.dom4j.DocumentException;     
  10. import org.dom4j.DocumentHelper;     
  11. import org.dom4j.Element;     
  12. import org.dom4j.Node;     
  13. import org.dom4j.io.SAXReader;     
  14. import org.dom4j.io.XMLWriter;     
  15.     
  16. public class MyDom4j {     
  17.     /**    
  18.      * 动态创建一个bean配置文件,包含HelloWorld这个bean,并添加初始值    
  19.      * */    
  20.     public void createXML(String xmlPath, String msg) throws IOException {     
  21.         Document XmlDoc = DocumentHelper.createDocument();     
  22.         XmlDoc.addDocType("beans""-//SPRING//DTD BEAN//EN",     
  23.                 "http://www.springframework.org/dtd/spring-beans.dtd");     
  24.         //首先创建beans根节点     
  25.         Element beansEle = XmlDoc.addElement("beans");     
  26.              
  27.         //注意:dom4j是支持类似于jQuery一样的链式操作的     
  28.         Element beanHelloWorld = beansEle.addElement("bean")     
  29.                 .addAttribute("id""HelloWorld")     
  30.                 .addAttribute("class""com.iteye.bolide74.action.HelloWorld");     
  31.         Element propertyHelloWorld = beanHelloWorld.addElement("property")     
  32.                 .addAttribute("name""msg");     
  33.         Element valueHelloWorld = propertyHelloWorld.addElement("value")     
  34.                 .addText(msg);     
  35.         XMLWriter outXml = new XMLWriter(new FileWriter(new File(xmlPath)));     
  36.         outXml.write(XmlDoc);     
  37.         outXml.close();     
  38.     }     
  39.     
  40.     /**    
  41.      * 首先遍历一个bean配置文件里的所有bean,获取id和class的值, 然后修改HelloWorld这个bean的msg的值    
  42.      * @throws IOException     
  43.      * */    
  44.     public void editXML(String xmlPath, String msg) throws DocumentException, IOException {     
  45.         Document XmlDoc = new SAXReader().read(new File(xmlPath));     
  46.         List xmlList = XmlDoc.selectNodes("/beans/bean");     
  47.         System.out.println("\r\n遍历所有的bean获得id和class:");     
  48.         for (Element element : xmlList) {     
  49.             System.out.println("id:" + element.attributeValue("id")     
  50.                     + " / class:" + element.attributeValue("class"));     
  51.         }     
  52.         System.out.println("\r\n动态修改HelloWorld这个bean的msg值:");     
  53.     
  54. //用XPath来获取单一节点     
  55.         Node valueHelloWorld = XmlDoc     
  56.                 .selectSingleNode("/beans/bean[@id='HelloWorld']/property[@name='msg']/value");     
  57.         System.out.println("原始值为:" + valueHelloWorld.getText());     
  58.         valueHelloWorld.setText(msg);     
  59.         System.out.println("修改后的值为:" + valueHelloWorld.getText());     
  60. //修改完了以后记得保存,要不然你会纳闷为什么XML文件没变的,哈哈     
  61.         XMLWriter outXml = new XMLWriter(new FileWriter(new File(xmlPath)));     
  62.         outXml.write(XmlDoc);     
  63.         outXml.close();     
  64.     }     
  65. }    

 

Java代码

  1. package com.iteye.bolide74.action;     
  2.     
  3. public class HelloWorld {     
  4.     public String msg;     
  5.     
  6.     public String getMsg() {     
  7.         return msg;     
  8.     }     
  9.     
  10.     public void setMsg(String msg) {     
  11.         this.msg = msg;     
  12.     }     
  13. }    

 

Tester实现类部分:

Java代码

  1. package com.iteye.bolide74.tester;     
  2.     
  3. import java.io.IOException;     
  4.     
  5. import org.dom4j.DocumentException;     
  6. import org.springframework.context.ApplicationContext;     
  7. import org.springframework.context.support.FileSystemXmlApplicationContext;     
  8.     
  9. import com.iteye.bolide74.action.HelloWorld;     
  10. import com.iteye.bolide74.action.MyDom4j;     
  11.     
  12. public class HelloWorldTester {     
  13.     public static void main(String[] args) {     
  14.         String xmlPath = "/WebContent/WEB-INF/conf/config_dom4j.xml";     
  15.         MyDom4j myBeans = new MyDom4j();     
  16.         try {     
  17.             myBeans.createXML(System.getProperty("user.dir") + xmlPath,     
  18.                     "Hello,world!this is created by dom4j!");     
  19.         } catch (IOException e) {     
  20.             e.printStackTrace();     
  21.         }     
  22.         ApplicationContext ac = new FileSystemXmlApplicationContext(xmlPath);     
  23.         HelloWorld helloWorld = (HelloWorld) ac.getBean("HelloWorld");     
  24.         System.out.println(helloWorld.getMsg());     
  25.         try {     
  26.             myBeans.editXML(System.getProperty("user.dir") + xmlPath,     
  27.                     "Hello,world!this is edited by dom4j!");     
  28.         } catch (DocumentException e) {     
  29.             e.printStackTrace();     
  30.         } catch (IOException e) {     
  31.             e.printStackTrace();     
  32.         }     
  33.         // 重新获取bean配置文件     
  34.         ac = new FileSystemXmlApplicationContext(xmlPath);     
  35.         helloWorld = (HelloWorld) ac.getBean("HelloWorld");     
  36.         System.out.println("\r\n" + helloWorld.getMsg());     
  37.     }     
  38. }    

 

输出结果为:

Html代码

  1. Hello,world!this is created by dom4j!     
  2.     
  3. 遍历所有的bean获得id和class:     
  4. id:HelloWorld / class:com.iteye.bolide74.action.HelloWorld     
  5.     
  6. 动态修改HelloWorld这个bean的msg值:     
  7. 原始值为:Hello,world!this is created by dom4j!     
  8. 修改后的值为:Hello,world!this is edited by dom4j!     
  9.     
  10. Hello,world!this is edited by dom4j!  

 

责任编辑:金贺 来源: ITEYE博客
相关推荐

2011-07-13 09:59:27

2009-06-17 14:10:30

Spring配置文件

2021-11-07 14:00:16

JekyllBashAPI后端

2010-01-08 17:32:11

Ubuntu samb

2009-11-25 09:57:17

PHPPDF

2010-02-22 15:59:48

2010-01-15 10:36:49

CentOS yum配

2009-06-10 11:09:40

配置文件SessionEclipse+JBo

2010-06-29 14:54:26

2021-03-08 08:40:25

Spring Bean 创建单例对象

2010-01-15 12:01:55

CentOS Linu

2011-03-25 17:13:37

Nagios配置文件

2011-02-25 16:39:34

proftpd配置文件

2021-02-03 08:02:50

Spring Bean框架

2010-01-13 10:48:49

Centos设置

2010-02-24 14:10:54

WCF修改App.co

2011-05-18 17:15:45

2021-09-30 06:31:12

Spring Boot配置密码

2011-01-19 14:00:21

2011-03-23 15:13:08

Nagios配置文件
点赞
收藏

51CTO技术栈公众号