文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-06-17 13:13

关注

这篇文章给大家介绍如何动态创建和修改Spring的bean配置文件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

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

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

其中有几个要点:

如果只是创建一个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

...

...

...

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

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

Action部分:

Java代码

package com.iteye.bolide74.action;         import java.io.File;     import java.io.FileWriter;     import java.io.IOException;     import java.util.List;         import org.dom4j.Document;     import org.dom4j.DocumentException;     import org.dom4j.DocumentHelper;     import org.dom4j.Element;     import org.dom4j.Node;     import org.dom4j.io.SAXReader;     import org.dom4j.io.XMLWriter;         public class MyDom4j {                 public void createXML(String xmlPath, String msg) throws IOException {             Document XmlDoc = DocumentHelper.createDocument();             XmlDoc.addDocType("beans", "-//SPRING//DTD BEAN//EN",                     "http://www.springframework.org/dtd/spring-beans.dtd");             //首先创建beans根节点             Element beansEle = XmlDoc.addElement("beans");                          //注意:dom4j是支持类似于jQuery一样的链式操作的             Element beanHelloWorld = beansEle.addElement("bean")                     .addAttribute("id", "HelloWorld")                     .addAttribute("class", "com.iteye.bolide74.action.HelloWorld");             Element propertyHelloWorld = beanHelloWorld.addElement("property")                     .addAttribute("name", "msg");             Element valueHelloWorld = propertyHelloWorld.addElement("value")                     .addText(msg);             XMLWriter outXml = new XMLWriter(new FileWriter(new File(xmlPath)));             outXml.write(XmlDoc);             outXml.close();         }                     public void editXML(String xmlPath, String msg) throws DocumentException, IOException {             Document XmlDoc = new SAXReader().read(new File(xmlPath));             List xmlList = XmlDoc.selectNodes("/beans/bean");             System.out.println("\r\n遍历所有的bean获得id和class:");             for (Element element : xmlList) {                 System.out.println("id:" + element.attributeValue("id")                         + " / class:" + element.attributeValue("class"));             }             System.out.println("\r\n动态修改HelloWorld这个bean的msg值:");         //用XPath来获取单一节点             Node valueHelloWorld = XmlDoc                     .selectSingleNode("/beans/bean[@id='HelloWorld']/property[@name='msg']/value");             System.out.println("原始值为:" + valueHelloWorld.getText());             valueHelloWorld.setText(msg);             System.out.println("修改后的值为:" + valueHelloWorld.getText());     //修改完了以后记得保存,要不然你会纳闷为什么XML文件没变的,哈哈             XMLWriter outXml = new XMLWriter(new FileWriter(new File(xmlPath)));             outXml.write(XmlDoc);             outXml.close();         }     }

Java代码

package com.iteye.bolide74.action;         public class HelloWorld {         public String msg;             public String getMsg() {             return msg;         }             public void setMsg(String msg) {             this.msg = msg;         }     }

Tester实现类部分:

Java代码

package com.iteye.bolide74.tester;         import java.io.IOException;         import org.dom4j.DocumentException;     import org.springframework.context.ApplicationContext;     import org.springframework.context.support.FileSystemXmlApplicationContext;         import com.iteye.bolide74.action.HelloWorld;     import com.iteye.bolide74.action.MyDom4j;         public class HelloWorldTester {         public static void main(String[] args) {             String xmlPath = "/WebContent/WEB-INF/conf/config_dom4j.xml";             MyDom4j myBeans = new MyDom4j();             try {                 myBeans.createXML(System.getProperty("user.dir") + xmlPath,                         "Hello,world!this is created by dom4j!");             } catch (IOException e) {                 e.printStackTrace();             }             ApplicationContext ac = new FileSystemXmlApplicationContext(xmlPath);             HelloWorld helloWorld = (HelloWorld) ac.getBean("HelloWorld");             System.out.println(helloWorld.getMsg());             try {                 myBeans.editXML(System.getProperty("user.dir") + xmlPath,                         "Hello,world!this is edited by dom4j!");             } catch (DocumentException e) {                 e.printStackTrace();             } catch (IOException e) {                 e.printStackTrace();             }             // 重新获取bean配置文件             ac = new FileSystemXmlApplicationContext(xmlPath);             helloWorld = (HelloWorld) ac.getBean("HelloWorld");             System.out.println("\r\n" + helloWorld.getMsg());         }     }

输出结果为:

Html代码

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

关于如何动态创建和修改Spring的bean配置文件就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯