Groovy 是用于 Java 虚拟机的一种敏捷的动态语言,很吸引人的一点是 Java 代码完全可以在 Groovy 里运行,Groovy 脚本可以动态的加载运行,例如网络游戏,为了游戏的平衡,每运行一段时间就会调整角色的攻击力计算公式(C, C++写的游戏一般会用 Lua 作为计算脚本),如果是写在 Java 代码里,每次更新都要把主程序重新编译发布,代价是很大的,但是如果使用 Groovy 来提供计算,则只需要更新发布 Groovy 脚本(文本文件) 即可,估计也就是几 K。
项目目录:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| ├── main │ ├── java │ │ ├── Main.java │ │ └── com │ │ └── xtuer │ │ └── service │ │ └── HelloService.java │ └── resources │ ├── groovy │ │ └── com │ │ └── xtuer │ │ └── service │ │ └── HelloServiceImpl.groovy │ └── spring-beans.xml └── test ├── java └── resources
|
Spring 集成 Groovy 的步骤
- 定义 Java 接口
- Groovy 的类实现这个接口 (Groovy 脚本文件要放在资源文件里,否则编译的时候不会被自动复制到编译输出的文件夹中)
- 在 Spring 的 Bean 配置文件里创建 Groovy 类的 bean
- Java 代码里取得 Groovy 的 bean,然后使用
Gradle 依赖
1 2
| compile 'org.springframework:spring-webmvc:4.3.0.RELEASE' compile 'org.codehaus.groovy:groovy-all:2.4.5'
|
定义 Java 接口
1 2 3 4 5
| package com.xtuer.service;
public interface HelloService { String hello(); }
|
Groovy 的类实现 Java 接口
1 2 3 4 5 6 7 8 9
| package com.xtuer.service;
public class HelloServiceImpl implements HelloService { String name;
String hello() { return "Hello $name. Welcome to Groovy in Spring"; } }
|
在 spring-beans.xml 里创建 Groovy 类的 bean
1 2 3 4 5 6 7 8 9 10 11 12 13
| <?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.xsd"> <lang:groovy id="helloService" script-source="classpath:groovy/com/xtuer/service/HelloServiceImpl.groovy"> <lang:property name="name" value="Biao"/> </lang:groovy> </beans>
|
- lang:groovy: 创建 Groovy 的 bean
- lang:property: Groovy 的 bean 也是可以设置属性的
- script-source: 指定 Groovy 脚本的路径
- refresh-check-delay=”30000”: 可以在 lang:groovy 里指定刷新脚本的时间属性
Java 代码里取得 Groovy 的 bean,然后使用
1 2 3 4 5 6 7 8 9 10 11
| import com.xtuer.service.HelloService; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring-beans.xml"); HelloService service = context.getBean("helloService", HelloService.class); System.out.println(service.hello()); } }
|
输出:
1
| Hello Biao. Welcome to Groovy in Spring
|
参考资料
Groovy 在 Spring 中的简单使用