http://www.ibm.com/developerworks/cn/java/j-groovierspring2.html

http://blog.csdn.net/qq362228416/article/details/8811136

http://ronxin999.blog.163.com/blog/static/42217920201151611392947/

Groovy是一个基于JVM的动态语言,对于一个Java开发者,它最让我喜欢的地方就是兼容Java的语法,学习使用成本低。从2.0版本开始,Spring就对Groovy这些动态语言提供了支持,结合Spring和Groovy,可以在Spring中实现Bean的动态装载,极大的增加了应用代码的灵活性,下面让我们看示例。

1. Groovy 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:context="http://www.springframework.org/schema/context"
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.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 通过component-scan自动装载Bean,简化配置 -->
<context:component-scan base-package="me.joshua.demo4j.spring.groovy.first.service" /> <!-- 配置动态加载的Bean,基于Spring的Resource支持,可从网络或本地文件获取Groovy代码 -->
<lang:groovy id="simple" refresh-check-delay="2000"
script-source="path/to/groovy/Simple.groovy" /> </beans>

在Spring中通过lang标签即可像Java Bean一样声明Groovy Bean,也可以类似的设置构造函数参数,属性及init/destroy方法。配置中,refresh-check-delay指明检查代码更新的间隔,即上一次代码变化检查(和重装载,如果有的话)结束到下一次检查开始的时间间隔(ms),设置了该属性,Spring就会定期的检查代码的变更,一旦有变化就重新编译装载对应的Groovy Bean。script-source则是Groovy代码的路径,Spring底层使用其Resource机制进行代码的获取,可以是Http形式、本地文件、或是类路径下的文件,可参考相应的文档。

2. Groovy Bean的实现

package me.joshua.demo4j.spring.groovy.first.script;

import ......

class Simple implements ScriptService {

	@Autowired
private MemberService memberService public void run() {
Member member = memberService.findMember("daonan.zhan@gmail.com");
System.out.println(member);
}
}

由于Groovy是兼容Java语法的,所以可以完全按Java代码编写,以上代码就和Java代码没有区别,不同的只是文件后缀为.groovy。由于Groovy对Java类的良好支持,甚至可以直接使用Spring注解来引入Groovy Bean对其他Bean的依赖,通过与其他Bean的协作来实现复杂的业务逻辑。又,因为Groovy Bean是动态生成的,需要提供相应的接口,以便给其他Bean调用。

3. 示例运行

package me.joshua.demo4j.spring.groovy.first;

import ......

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:simple.xml")
public class Demo {     @Autowired
    private ScriptService scriptService;     @Test
    public void run() {
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    System.in));
            while (true) {
                // 循环获取输入,每次有输入即进行一次调用
                String line = reader.readLine();
                if ("exit".equals(line)) {
                    break;
                }
                scriptService.run();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在示例代码的test目录下,可以执行单元测试运行示例代码(在“/src/test/java”目录中),其中配置里定义的Groovy Bean在此作为一个服务被调用。在示例的执行过程中,可以修改Groovy代码来演示其动态装载的功能。

4. 示例代码的说明

  1. 代码托管在Git@OSC上,欢迎下载运行,http://git.oschina.net/joshuazhan/demo4j.git;
  2. 本示例的项目路径为“demo4j/spring/groovy/first”,需要使用Maven来生成工程,“mvn eclipse:eclipse”;
  3. 示例指定了1.6的JDK版本,有需要可以在pom中修改jdk.version的值;
  4. 配置文件在“/src/main/resources”目录下,其中groovy.properties保存了Groovy代码的地址,默认使用的是Git@OSC的地址,在运行时可修改成本地的文件地址,以便动态修改Groovy Bean代码。

5. 小结

至此,可以看到Spring对Groovy有着良好的支持,基于Groovy Bean,可以实现非常灵活可配的业务逻辑。比如,可以把Groovy Bean的代码通过网站托管起来,应用代码在运行时从网站拉取代码,一旦业务有变更,直接修改托管的代码,即可在所有应用中生效,这将给应用带来极大的灵活性。

spring + groovy 转的更多相关文章

  1. 第一个Spring Boot Web程序

    需要的环境和工具: 1.Eclipse2.Java环境(JDK 1.7或以上版本)3.Maven 3.0+(Eclipse已经内置了) 写个Hello Spring: 1.新建一个Maven项目,项目 ...

  2. Spring boot配置文件 application.properties

    http://www.tuicool.com/articles/veUjQba 本文记录Spring Boot application.propertis配置文件的相关通用属性 # ========= ...

  3. 玩转spring boot——properties配置

    前言 在以往的java开发中,程序员最怕大量的配置,是因为配置一多就不好统一管理,经常出现找不到配置的情况.而项目中,从开发测试环境到生产环境,往往需要切换不同的配置,如测试数据库连接换成生产数据库连 ...

  4. spring boot项目配置文件集合

    表 1. Spring Boot 推荐的基础 POM 文件 名称 说明 spring-boot-starter 核心 POM,包含自动配置支持.日志库和对 YAML 配置文件的支持. spring-b ...

  5. spring boot application properties配置详解

    # =================================================================== # COMMON SPRING BOOT PROPERTIE ...

  6. 丢弃重口味的xml配置--spring4用groovy配置bean(转)

    spring4之前,bean的配置可以主要分为两种方式,一种是使用基于xml,个人非常讨厌这种方式,因为明明一件很简单的事,放在xml中就会多了不少繁杂的信息.另一种方式,是从spring3.0开始, ...

  7. spring boot application.properties 属性详解

    2019年3月21日17:09:59 英文原版: https://docs.spring.io/spring-boot/docs/current/reference/html/common-appli ...

  8. Spring Boot属性文件配置文档(全部)

    This sample file is meant as a guide only. Do not copy/paste the entire content into your applicatio ...

  9. spring boot 全局配置属性一览

    # =================================================================== # COMMON SPRING BOOT PROPERTIE ...

随机推荐

  1. poj_3415 后缀数组+单调栈

    题目大意 定义字符串T的子串T(i, k)=TiTi+1...Ti+k-1, 1≤i≤i+k-1≤|T|. 给定两个字符串A和B,定义集合S为S = {(i, j, k) | k≥K, A(i, k) ...

  2. 三分搜索-ZOJ LightBulb

    开始算法基础学习的第一天 今天学习的内容是三分搜索 相对来说很基础的内容(还是觉得脑子不够用) 三分搜索主要用于凸函数查找极大值. (盗个图) 如图所示 若要查找该函数的最大值 可以考虑和二分法一样的 ...

  3. Linux安装vsftpd

    卸载vsftpd sudo yum remove vsftpd 安装vsftpd sudo yum -y install vsftpd 创建一个文件夹用来当作ftp得仓库 cd / sudo mkdi ...

  4. 在 Java 应用程序中绑定 Bean 和数据

    本指南介绍了 NetBeans IDE 对 Java 应用程序中 Bean 绑定和数据绑定的支持. 要学完本教程,您需要具备以下软件和资源. 软件或资源 要求的版本 NetBeans IDE 版本 7 ...

  5. Delphi编写下载程序:UrlDownloadToFile的进度提示

    urlmon.dll中有一个用于下载的API,MSDN中的定义如下: HRESULT URLDownloadToFile(             LPUNKNOWN pCaller,       L ...

  6. 【Python算法】递归与递归式

    该树结构显示了从1(根节点)到n(n个叶节点)的整个倍增过程.节点下的标签表示从n减半到1的过程. 当我们处理递归的时候,这些级数代表了问题实例的数量以及对一系列递归调用来说处理的相关工作量. 当我们 ...

  7. trust an HTTPS connection

    https://zh.wikipedia.org/wiki/传输安全协议 SSL协议客户端要收发几个握手信号: 发送一个“ClientHello”消息,内容包括:支持的协议版本,比如TLS1.0版,一 ...

  8. 多线程入门-第五章-线程的调度与控制之yield

    yield与sleep类似,只是不能指定暂停多长时间,并且只能让同优先级的线程有执行的机会,让位时间不固定. /* yield使用 */ public class ThreadTest04 { pub ...

  9. 【转】浏览器Request Header和Response Header的内容

    1)请求(客户端->服务端[request])     GET(请求的方式) /newcoder/hello.html(请求的目标资源) HTTP/1.1(请求采用的协议和版本号)     Ac ...

  10. 前端开发 - JQuery&Bootstrap - 总结

    一.JavaScript和Jquery的区别 1.javascript的缺点: 1.书写繁琐,代码量大 2.代码复杂 3.动画效果,很难实现.使用定时器 各种操作和处理 2.定义: 1.Javascr ...