`
wiselyman
  • 浏览: 2094094 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
博客专栏
Group-logo
点睛Spring4.1
浏览量:82359
74ae1471-94c5-3ae2-b227-779326b57435
点睛Spring MVC4...
浏览量:130807
社区版块
存档分类
最新评论

14点睛Spring4.1-脚本编程

 
阅读更多

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

新书推荐《JavaEE开发的颠覆者: Spring Boot实战》,涵盖Spring 4.x、Spring MVC 4.x、Spring Boot企业开发实战。

 

京东地址:http://item.jd.com/11894632.html

当当地址:http://product.dangdang.com/23926195.html

亚马逊地址:http://www.amazon.cn/图书/dp/B01D5ZBFUK/ref=zg_bsnr_663834051_6 

淘宝地址:https://item.taobao.com/item.htm?id=528426235744&ns=1&abbucket=8#detail

 

 

 

或自己在京东、淘宝、亚马逊、当当、互动出版社搜索自选。

 


0
1
分享到:
评论
9 楼 readxuxuegang 2017-09-17  
博主你好。如果groovy的代码保存在数据库里,不是文件里,这样怎么搞
8 楼 高桌子矮板凳 2015-11-30  
高桌子矮板凳 写道
博主你好。用你的例子,我测试的结果:打印的都是ok嘛。不知道什么情况
部分输出如下:

信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@dfd3711: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,main,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor,org.springframework.scripting.config.scriptFactoryPostProcessor,demoService]; root of factory hierarchy
hello 1234 ok
hello 1234 ok
十一月 30, 2015 2:12:04 下午 org.springframework.context.support.AbstractApplicationContext doClose


好意思,没改脚本
7 楼 高桌子矮板凳 2015-11-30  
博主你好。用你的例子,我测试的结果:打印的都是ok嘛。不知道什么情况
部分输出如下:

信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@dfd3711: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,main,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor,org.springframework.scripting.config.scriptFactoryPostProcessor,demoService]; root of factory hierarchy
hello 1234 ok
hello 1234 ok
十一月 30, 2015 2:12:04 下午 org.springframework.context.support.AbstractApplicationContext doClose

6 楼 wiselyman 2015-05-21  
laoniu85 写道
恩。。我的编译器(idea) 编译出来之后
源代码目录中的非文件是不会被拷贝到输出目录(classpath)中的
所以有这问题

你要点一下那个写着"01 10 01"的小图标
5 楼 wiselyman 2015-05-21  
laoniu85 写道
博主:我大量搬运了你的Spring4.1点睛系列到自己的qq空间。


没事,记得注明出处哈!
4 楼 laoniu85 2015-05-21  
博主:我大量搬运了你的Spring4.1点睛系列到自己的qq空间。
3 楼 laoniu85 2015-05-21  
恩。。我的编译器(idea) 编译出来之后
源代码目录中的非文件是不会被拷贝到输出目录(classpath)中的
所以有这问题
2 楼 wiselyman 2015-05-20  
laoniu85 写道
xml和groovy文件需要放到resource的路径中,否则会出现找不到xml和脚本的问题。

代码我是测试运行过的,只要指定正确的classpath路径,放哪都可以
1 楼 laoniu85 2015-05-20  
xml和groovy文件需要放到resource的路径中,否则会出现找不到xml和脚本的问题。

相关推荐

    国元点睛-20230825-国元期货-23页.pdf

    国元点睛-20230825-国元期货-23页

    4.1-细胞分化形成组织.pptx

    细胞分化是生物体发育过程中的关键环节,它使得单一的受精卵细胞逐渐发展成为具有各种不同特性的细胞群体,最终构建出复杂的生命体。在医学领域,理解细胞分化对于研究胚胎发育、组织修复和疾病的发生机制至关重要。...

    眼睛穴位图-睛明穴-取穴方法

    眼睛穴位图-睛明穴-取穴方法 方便经常上网的朋友使用

    object-c 编程 2

    **标题:“Object-C 编程 2”** 在iOS应用开发领域,Objective-C(简称Object-C)是一种不可或缺的编程语言,尤其在Apple的生态系统中。本主题“Object-C 编程 2”深入探讨了Object-C的核心概念和高级特性,为...

    stasm4.1版本-人脸识别77个特征点提取

    **STASM4.1版本-人脸识别77个特征点提取** STASM,全称为Shape Tracking and Analysis by Shape Models,是一种广泛应用于人脸识别领域的算法,尤其在面部特征点定位方面表现出色。该算法的核心在于通过形状模型来...

    ios-脚本化地图

    综上所述,"ios-脚本化地图"的实现涵盖了MapKit的使用、文件读取与字符串操作、脚本解析以及Objective-C编程基础等多个知识点。通过这个小案例,开发者不仅可以深入理解地图服务的实现,还能提升文件处理和文本解析...

    司机眼睛状态标记---应用OpenCV人脸检测与模板匹配方法

    使用OpenCV1.0实现了眼睛状态识别,首先用harr检测眼睛,然后用模板匹配的方法标记眼睛状态。 程序需要使用Eyes45x11.xml Mouth25x15.xml Nose25x15.xml,将其放到C:\Program Files\OpenCV\data\haarcascades目录下...

    点睛文本编码查询(文本的字符串转换工具)

    软件名:点睛文本编码查询 功能:本软件用于将文本的字符串转换为 Text、ASCII、Default、Unicode、BigEndianUnicode、UTF-8、UTF-7、GBK、BIG5 之间的互相转换,用于文本查询。转换结果使用十六进制表示。

    点睛网赚论坛源码整站程序+10W数据【送主动推送工具】

    点睛网赚论坛源码整站程序+10W数据【送主动推送工具】 安装教程https://www.ygwzjs.cn/post/260.html 百度推送工具https://www.ygwzjs.cn/post/181.html 效果演示:z-www.seoheimao.cn 【全新优化】点睛网论坛整站...

    电子功用-可编程护眼养身功能电子模块装置及衍生与外接应用装置

    《电子功用-可编程护眼养身功能电子模块装置及衍生与外接应用装置》这一主题,涵盖了现代科技与健康生活结合的重要领域。在当前信息化社会中,电子设备的使用日益普及,与此同时,如何在享受科技便利的同时保护眼睛...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part3

    第一部分 点睛Spring 4.x 第1 章 Spring 基础 2 1.1 Spring 概述 2 1.1.1 Spring 的简史 2 1.1.2 Spring 概述 3 1.2 Spring 项目快速搭建 5 1.2.1 Maven 简介 6 1.2.2 Maven 安装 6 1.2.3 Maven 的pom.xml 7 1.2.4 ...

    360点睛多语言加密示例和密码加密调试工具.zip

    《360点睛营销平台多语言加密及调试技术详解》 360点睛营销开放平台是一款由360公司推出的广告投放和营销管理工具,它为开发者提供了丰富的API接口,以帮助开发者构建和优化自己的广告系统。在这个名为"360点睛多...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part2

    第一部分 点睛Spring 4.x 第1 章 Spring 基础 2 1.1 Spring 概述 2 1.1.1 Spring 的简史 2 1.1.2 Spring 概述 3 1.2 Spring 项目快速搭建 5 1.2.1 Maven 简介 6 1.2.2 Maven 安装 6 1.2.3 Maven 的pom.xml 7 1.2.4 ...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part1

    第一部分 点睛Spring 4.x 第1 章 Spring 基础 2 1.1 Spring 概述 2 1.1.1 Spring 的简史 2 1.1.2 Spring 概述 3 1.2 Spring 项目快速搭建 5 1.2.1 Maven 简介 6 1.2.2 Maven 安装 6 1.2.3 Maven 的pom.xml 7 1.2.4 ...

    点睛网赚论坛整站程序+全套数据.zip

    【标题】"点睛网赚论坛整站程序+全套数据.zip"所涵盖的知识点主要集中在网站建设和运营领域,特别是关于论坛程序和数据管理方面。这个压缩包文件提供了一个完整的网络赚钱论坛的源代码和所有相关数据,对于想要搭建...

    点睛 内码转换器

    "点睛内码转换器"是一款专为处理文本编码问题设计的工具,它能够帮助用户在不同的字符编码之间进行转换,以解决由于编码不匹配导致的乱码问题。在计算机科学领域,字符编码是用于表示文本的一系列规则,常见的有...

    360点睛使用手册(2019.08).pdf

    360点睛使用手册是360官方于2019年推出的移动客户端软件,主要功能是推广管理。该手册详细介绍了软件的使用方法和功能特点,适用于广告主进行随时随地的账户投放管理。 首先,手册中的产品介绍部分指出,360点睛是...

    眼睛定位- 模板匹配

    - `tmp.m`、`plotbox.m`、`main.m`:这些是MATLAB脚本文件,可能实现了模板匹配的算法逻辑。`tmp.m`可能是辅助函数,`plotbox.m`可能用于绘制匹配结果的边界框,而`main.m`可能是整个程序的主入口,调用其他函数...

    点睛字符替换器 v1.05特别修正版.rar

    点睛字符替换器v1.05特别修正版是一款针对文本处理的专业软件,主要用于批量替换文本中的特定字符或字符串。这个特别修正版可能是对原始版本的优化和改进,以解决某些问题或添加新功能。在IT领域,字符替换工具是...

Global site tag (gtag.js) - Google Analytics