`
lishangshun
  • 浏览: 7167 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

dom4j学习笔记:动态创建和修改Spring的bean配置文件

阅读更多



    今天本来打算写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<Element> 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. font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 38px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 10px; border-left-width: 1px; border-left-style: solid; border-left-color: #d1d7
    分享到:
    评论

相关推荐

    spring2.5 学习笔记

    在Spring框架的学习过程中,理解如何使用JDOM解析和操作XML文件对于配置和管理Spring中的bean非常重要。 #### 模拟Spring功能 在深入学习Spring之前,尝试手动实现Spring的部分功能,如依赖注入,可以加深对Spring...

    spring框架案例学习文档笔记

    ### Spring框架案例学习文档笔记知识点总结 #### 面向抽象编程 - **定义**:面向抽象编程是一种软件设计原则,旨在通过抽象层隔离具体实现细节。这种方式有助于提高代码的可维护性和灵活性。 - **实践**:在Spring...

    spring学习笔记

    为了搭建 Spring 开发环境,我们需要在项目中引入必要的库文件,如 Ant、ANTLR、AOP Alliance、ASM、DOM4J、JTA、Jakarta Commons、CGLIB 和 Log4j 等。同时,还需要在 XML 配置文件中指定 DTD(Document Type ...

    EJB培训时候的笔记

    **企业级JavaBeans (EJB) 技术...这些笔记将深入探讨EJB的核心概念、生命周期管理、异常处理以及与其它技术(如Spring、DOM4J和AJAX)的协同工作。通过学习这些笔记,你将能够掌握EJB技术,并在实际项目中灵活运用。

    张龙S2SH学习笔记(经典)

    【张龙S2SH学习笔记(经典)】是基于圣思园张龙的视频教程整理出的学习资料,主要涵盖了Struts2、Spring和Hibernate这三大框架的整合使用,也就是我们常说的SSH(Spring、Struts2、Hibernate)框架集成。SSH框架在...

    达内学习笔记全套(学习java的好文档)

    【达内学习笔记全套】是一份综合性的IT学习资源,主要涵盖了Java开发相关的多个重要领域。这份笔记由EagleKing创作,并在heimeiyingwang的指导下完成,旨在为初学者和有一定经验的开发者提供深入浅出的技术讲解。...

    《轻松搞定XML》的范例源代码和学习笔记

    XML还广泛应用于Web服务(如SOAP消息)、配置文件(如Spring框架的bean定义)、数据交换(如RSS和Atom feeds)等领域。通过学习这些源代码,你可以掌握XML的实际应用,并提升处理和生成XML文档的能力。 总而言之,...

    java基础完整版印象笔记

    1. **Spring**:依赖注入(DI)和面向切面编程(AOP),以及Spring的Bean管理。 2. **SpringMVC**:处理HTTP请求,模型-视图-控制器(MVC)架构。 3. **MyBatis**:简化SQL操作的持久层框架,动态SQL和映射文件的...

    thymeleaf学习笔记

    4. Spring集成新特性:包括与Spring特性的更好集成,从表达式中访问更多的bean,集成转换基础设施,以及基于Spring资源的模板解析器。 具体到模板的开发技术,Thymeleaf通过使用特定的属性前缀来标识模板中的动态...

    java从入门到精通笔记

    - **DOM操作**: 获取元素、修改样式 - **jQuery**: jQuery的选择器、事件绑定 **9. Spring** - **Spring框架**: IoC容器、AOP - **Bean管理**: Bean的生命周期 - **事务管理**: 声明式事务 - **MVC模式**: Spring ...

    Java学习笔记-个人整理的

    {14.4}dom4j}{207}{section.14.4} {14.5}XPath}{210}{section.14.5} {14.6}apache.commons}{211}{section.14.6} {15}sqlite3}{213}{chapter.15} {16}Web基础}{215}{chapter.16} {16.1}...

    pangpang ---java开发笔记20100628

    Spring的IoC(控制反转)和DI(依赖注入)是其核心理念,笔记中可能会详细阐述如何配置和使用Bean。 JavaScript是前端开发的主要语言,它在网页中实现动态效果和用户交互。Pangpang的笔记可能涵盖了DOM操作、事件...

    java基础笔记+前端+SSM框架

    MyBatis的学习包括Mapper接口的编写、XML映射文件的配置,以及动态SQL的运用。 综合以上内容,这个资料包涵盖了从编程基础到实际项目开发的关键技术,对于想要系统学习Java及Web开发的人来说,是一份非常有价值的...

    软件工程师笔记(c++,java等)

    【C++知识点】 ...这些笔记涵盖了软件工程师必备的技术栈,从基础语言到高级框架,为深入学习和理解提供了丰富的参考资料。无论是初学者还是经验丰富的开发者,都能从中获益,提升自己的专业技能。

    带大四小白一起做前后端分离的毕设管理系统,技术栈SpringBoot + Vue + ElementUI.zip

    1. **自动配置**: SpringBoot会根据项目类路径下的依赖自动配置Bean。 2. **内嵌Web服务器**: 如Tomcat,可直接运行无须额外部署。 3. **起步依赖**: 通过`starters`方便地引入各种功能的依赖。 4. **Actuator**: ...

    基于SSM+vue的中学课内小说阅读与学习系统.zip

    在中学课内小说阅读与学习系统中,可能包含的功能模块有:用户注册登录、小说分类与搜索、阅读界面、个人中心、在线答题、学习笔记等。这些功能需要前后端协同工作,通过API接口进行数据交换,确保信息的准确传递。 ...

Global site tag (gtag.js) - Google Analytics