千家信息网

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

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章给大家介绍如何动态创建和修改Spring的bean配置文件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。今天本来打算写Spring温故知新系列的第二篇,不过突然想起一直都
千家信息网最后更新 2025年11月07日如何动态创建和修改Spring的bean配置文件

这篇文章给大家介绍如何动态创建和修改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代码

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 {         /**         * 动态创建一个bean配置文件,包含HelloWorld这个bean,并添加初始值         * */        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();         }             /**         * 首先遍历一个bean配置文件里的所有bean,获取id和class的值, 然后修改HelloWorld这个bean的msg的值         * @throws IOException          * */        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配置文件就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

文件 代码 动态 配置 内容 原始 更多 节点 要不 部分 链式 帮助 支持 不错 重要 痛苦 温故知新 没什么 这样一来 一来 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库创建方法有哪些 长春宝德网络技术有限公司培训 开设私服传奇用什么云服务器 阿阳家族最新服务器号 代理服务器如何无线共享 搞软件开发能和大数据接轨吗 服务器cpu开直播可以吗 苹果8怎么移除游戏数据库 电脑服务器怎么看有没有连接 触变网络技术 方舟手机能不能开服务器 移动软件开发方案 濮阳网络安全支队 宁波北仑网络技术有限公司 怀旧服服务器开放日期 无锡手机配件管理软件开发 华为软件开发视频 软件开发意向职位 网络安全课程实践活动 查询数据库死锁语句 数据库面试技术题目及答案 提取数据库名称 网络技术类开票怎么开 中国知网引文数据库的用途 软件开发电商的支付系统怎么做 5g互联网科技公司做哪些项目 外网通过80端口访问内网服务器 网络安全员的主要工作内容 没有数据库检索信息 查数据库的软件有哪些
0