当前位置:首页 > 开发 > 系统架构 > 架构 > 正文

14点睛Spring4.1-脚本编程

发表于: 2015-05-20   作者:wiselyman   来源:转载   浏览:
摘要: 14.1 Scripting脚本编程 脚本语言和java这类静态的语言的主要区别是:脚本语言无需编译,源码直接可运行; 如果我们经常需要修改的某些代码,每一次我们至少要进行编译,打包,重新部署的操作,步骤相当麻烦; 如果我们的应用不允许重启,这在现实的情况中也是很常见的; 在spring中使用脚本编程给上述的应用场景提供了解决方案,即动态加载bean; spring支持脚本

14.1 Scripting脚本编程

  • 脚本语言和java这类静态的语言的主要区别是:脚本语言无需编译,源码直接可运行;
  • 如果我们经常需要修改的某些代码,每一次我们至少要进行编译,打包,重新部署的操作,步骤相当麻烦;
  • 如果我们的应用不允许重启,这在现实的情况中也是很常见的;
  • 在spring中使用脚本编程给上述的应用场景提供了解决方案,即动态加载bean;
  • spring支持脚本语言包含JRuby,Groovy,BeanShell;
  • 本例以spring主推的Groovy语言作为示例;
  • 动态加载bean目前暂不支持java config(应该在spring4.2版本支持,参见:Add support for dynamic languages refreshable beans in @Configuration classes),暂且使用xml配置()

14.2 示例

14.2.1 增加groovy语言支持包到maven

<dependency>
    <groupId>org.codehaus.groovy</groupId>
    <artifactId>groovy-all</artifactId>
    <version>2.4.3</version>
</dependency>

14.2.2 演示接口

package com.wisely.script;

public interface DemoService {
    public String sayHello();
}

14.2.3 使用groovy作为接口实现

import com.wisely.script.DemoService
class DemoServiceImpl implements DemoService{
    def msg
    String sayHello(){
        return 'hello'+msg+' ok' //第一次打印后修改成为'hello'+msg+' not ok'
    }
}

14.2.4 使用xml配置bean

  • script-source指定groovy源码地址
  • refresh-check-delay指定刷新时间
  • lang:property可注入值到groovy bean,包含普通值或者spring的bean
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:lang="http://www.springframework.org/schema/lang"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-4.1.xsd">
<lang:groovy id="demoService"
    script-source="com/wisely/script/DemoService.groovy"
    refresh-check-delay="5000">
    <lang:property name="msg" value="1234"/>
</lang:groovy>

</beans>

14.2.5 测试

package com.wisely.script;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
@Configuration
@ImportResource("classpath:com/wisely/script/script.xml")//加载groovybean的配置文件
public class Main {
    public static void main(String[] args) throws InterruptedException {
        AnnotationConfigApplicationContext context =
                new AnnotationConfigApplicationContext("com.wisely.script");
        DemoService ds = context.getBean(DemoService.class);

        System.out.println(ds.sayHello());
        Thread.sleep(10000);
        System.out.println(ds.sayHello());
        context.close();
    }

}

说明 先执行sayHello输出groovy bean的执行结果,此时修改groovy bean的sayHello的内容,5000毫秒后会加载新的bean的内容,我们等10秒,等待新的bean被加载,然后输出新的sayHello

输出结果:

hello 1234 ok
hello 1234 not ok

14点睛Spring4.1-脚本编程

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
14、JDBC数据库编程 14.1、为什么需要JDBC 当前所有的B/S系统无一不和数据库之间有交互 JDBC(Java
文中搜集了14个不错的学习资源,帮助你挑战自我,领略并探索计算机领域无穷奥秘。 1. [topcoder] [t
字符驱动编程模型 上面就是内核的cdev的结构。他只有6个成员。有一些是内核自己回去用的,有一些是
1. 在系统启动的过程中,将会启动一个名为 init的进程(它是系统中所有进程的祖先)。它所要完成的
孙鑫MFC(14)--网络编程 //-----------网络编程----------------- //--------------服务器程序------
write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie 讨论新闻组及文件 Technorati 标签: 显示
write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie 讨论新闻组及文件 Technorati 标签: 显示
[.net 面向对象编程基础] (14) 重构 通过面向对象三大特性:封装、继承、多态的学习,可以说我们已
这一篇篇幅相对少很多,几乎没有代码,全部都要靠本猫的语言组织能力啊!Cocoa框架在前面讲解F库时
链式存储结构特点:   在计算机中用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号