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

动态创建和修改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());    
    }    
}