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

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
<dependency>
<groupId>org.apache.directory.studio</groupId>
<artifactId>org.dom4j.dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1-beta-7</version>
</dependency>
// MyDom4j.java
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", "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();
}
}

// HelloWorld.java
public class HelloWorld {
public String msg;

public String getMsg() {
return msg;
}

public void setMsg(String msg) {
this.msg = msg;
}
}

// HelloWorldTester.java
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());
}
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值