`

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

    博客分类:
  • java
阅读更多
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());    
    }    
}   
分享到:
评论

相关推荐

    spring4示例代码

    spring-2 演示了外部配置文件的引入(connection),spel(spring el)表达式 ,静态工厂方式及实例工厂方式及factorybean方式创建bean, spring的生命周期及BeanPostProcessor的使用,注解方式创建bean 及使用...

    spring+springmvc+mybatis的整合

    这里就要导入mybatis和spring的整合包了,这里sqlsession中也要导入mybatis的配置文件 2.6 spring-bean 配置mapper自动扫描 MapperScannerConfigurer将扫描basePackage所指定的包下的所有接口类(包括子类), ...

    基于Springboot+Mybatis+ SpringMvc+springsecrity+Redis完整网站后台管理系统

    动态配置权限,角色和资源,权限控制到按钮粒度 采用token进行权限校验,禁用session,未登录返回401,权限不足返回403 采用redis存储token及权限信息 内置功能: 用户管理:用户查询、添加用户、修改用户、给...

    Spring-Reference_zh_CN(Spring中文参考手册)

    9.5.4. 为不同的bean配置不同的事务语义 9.5.5. &lt;tx:advice/&gt; 有关的设置 9.5.6. 使用 @Transactional 9.5.6.1. @Transactional 有关的设置 9.5.7. 插入事务操作 9.5.8. 结合AspectJ使用 @Transactional 9.6. 编程式...

    spring.doc

    2.2 Spring配置文件 7 2.3 Spring API 8 3 Spring基本功能详解 8 3.1 SpringIOC 8 3.2别名Alias 11 别名拓展: 11 3.3 Spring容器内部对象的创建 12 Spring容器内部对象创建拓展: 12 3.3.1使用类构造器实例化(默认...

    Spring 2.0 开发参考手册

    9.5.4. 为不同的bean配置不同的事务语义 9.5.5. &lt;tx:advice/&gt; 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 插入事务操作 9.5.8. 结合AspectJ使用 @Transactional 9.6. 编程式事务管理 9.6.1. 使用 ...

    Spring中文帮助文档

    9.5.4. 为不同的bean配置不同的事务语义 9.5.5. &lt;tx:advice/&gt; 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 事务传播 9.5.8. 通知事务操作 9.5.9. 结合AspectJ使用 @Transactional 9.6. 编程式事务管理 ...

    Spring.3.x企业应用开发实战(完整版).part2

    2.2.3 类包及Spring配置文件规划 2.3 持久层 2.3.1 建立领域对象 2.3.2 UserDao 2.3.3 LoginLogDao 2.3.4 在Spring中装配DAO 2.4 业务层 2.4.1 UserService 2.4.2 在Spring中装配Service 2.4.3 单元测试 2.5 展现层 ...

    Spring API

    9.5.4. 为不同的bean配置不同的事务语义 9.5.5. &lt;tx:advice/&gt; 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 事务传播 9.5.8. 通知事务操作 9.5.9. 结合AspectJ使用 @Transactional 9.6. 编程式事务管理 ...

    spring chm文档

    9.5.4. 为不同的bean配置不同的事务语义 9.5.5. &lt;tx:advice/&gt; 有关的设置 9.5.6. 使用 @Transactional 9.5.7. 插入事务操作 9.5.8. 结合AspectJ使用 @Transactional 9.6. 编程式事务管理 9.6.1. 使用 ...

    Spring.html

    PropertySource:加载配置文件 Import:导入其他配置类 AOP 概念:面向切面编程,在不改变源码的情况下对方法进行增强,抽取横切关注点(日志处理,事务管理,安全检查,性能测试等等),使用AOP进行增强,使程序员只需要...

    spring in action英文版

     1.6.1 比较Spring和EJB  1.6.2 关于其他轻量级容器  1.6.3 Web框架  1.6.4 持久层框架  1.7 小结  第2章 装配Bean  2.1 容纳你的Bean  2.1.1 BeanFactory介绍  2.1.2 使用应用上下文  ...

    Spring3.x企业应用开发实战(完整版) part1

    2.2.3 类包及Spring配置文件规划 2.3 持久层 2.3.1 建立领域对象 2.3.2 UserDao 2.3.3 LoginLogDao 2.3.4 在Spring中装配DAO 2.4 业务层 2.4.1 UserService 2.4.2 在Spring中装配Service 2.4.3 单元测试 2.5 展现层 ...

    新版本SpringCloud2学习手册

    创建springcloud-2.0-parent 42 Ribbon配置 45 配置Feign客户端超时时间 45 Api网关服务SrpingCloud Zuul 45 网关分类 46 网关设计 46 网关框架 48 网关作用 49 网关与过滤器区别 49 Nginx与Zuul的区别 49 ...

    spring security 参考手册中文版

    29.4.5 Spring Bean配置 226 29.4.6 LDAP属性和定制的UserDetails 227 29.5 Active Directory认证 228 29.5.1 ActiveDirectoryLdapAuthenticationProvider 228 活动目录错误代码 229 30. JSP标签库 230 30.1声明...

    Spring面试题

    有了 Spring,只要用 JavaBean 属性和配置文件加入依赖性(协作对象)。然后可以很容易地在需要时替换具有类似接口的协作对象。} Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心...

    springmybatis

    5. 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。 mybatis实战教程(mybatis in action)之一:开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis...

    boot-security.zip

    动态配置权限,角色和资源,权限控制到按钮粒度 采用token进行权限校验,禁用session,未登录返回401,权限不足返回403 采用redis存储token及权限信息 用户管理:用户查询、添加用户、修改用户、给用户分配角色 ...

    基于maven项目的SSM框架与layu前端框架的代码

    在spring容器启动的时候,spring会把你在配置文件中配置的bean都初始化好,然后在你需要调用的时候,就把它已经初始化好的那些bean分配给你需要调用这些bean的类(假设这个类名是A),分配的方法就是调用A的setter...

    基于Java开发的动态定时任务管理系统源码+使用说明.zip

    3. 修改配置文件 `src/main/resources/application.yml`,主要修改数据库连接的用户名和地址。 4. 启动项目。 5. 浏览器访问 `http://localhost:8080`,可以看到如下页面: 功能介绍 1. 项目启动时,会自动从数据库...

Global site tag (gtag.js) - Google Analytics