zoukankan      html  css  js  c++  java
  • spring + groovy 转

    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的代码通过网站托管起来,应用代码在运行时从网站拉取代码,一旦业务有变更,直接修改托管的代码,即可在所有应用中生效,这将给应用带来极大的灵活性。

  • 相关阅读:
    POJ 1001 Exponentiation
    POJ 2105 IP Address
    条款1:视C++为一个语言联邦
    条款2:尽量使用const ,enum,inline替换define
    走台阶问题
    Oracle之分页问题
    Oracle之子查询:Top-N问题
    Facade——外观模式
    PROXY——代理模式
    C++ 内联函数
  • 原文地址:https://www.cnblogs.com/gym333/p/6383972.html
Copyright © 2011-2022 走看看