作者:江南白衣
前篇:〈在Spring+Hibernate框架下,用动态语言写业务类〉讲述在Spring+Hibernate的架构下,因为动态语言所带来的利益,把一部分业务类改用Groovy编写并编译成Java Class文件。
而且,因为Groovy的强大与简便,加上与Java亲密无间的关系,一些框架类也可以逐渐考虑用Groovy编写。
1.虽然多是星零的好处,但忽然间一整吨好处摆在面前还是很让人感动的。
除了动态语言和闭包、MOP,Groovy其他的特性多是对J2SE中设计不合理的地方逐一进行修正,集合、IO、字符串操作......虽然多是星零的好处,但忽然间以整吨好处摆在面前还是挺让人感动的。
同时,Groovy完全兼容Java语法,但又提供糖糖选择的方式感觉很贴心。(Groovy唯一不支持的java语法就是Inner Class的定义和函数定义里的"throws Exception" , 私生子的好处啊)
隐约觉得因为动态语言的无类型,还有闭包这样带着Lisp式FP的印记,加上MOP这样的机制,可能会激发更大的变革发生。
1.动态类型
动态类型在Framework型项目中非常重要,多少设计模式呕心沥血,就是为了和这个类型搏斗。
而且,如果你是把代码编译成java Class,健壮性不会减低太多。
2.闭包
fp的基础,没有闭包的C++用函数指针,java用匿名内部类,都比他差远了。
详看Matin Flower <闭包>文章的中文版 ,在一段文件操作的Script中试演了一下,果然使代码简洁了好些。
3. MOP
Groovy的Team Leader-- Guillaume Laforge最喜欢的一样特性,groovy 嵌入式XML语法的基础,对属性和方法访问的intercept 机制。详看另一篇blog。
又比如,在MOP下,DAO那一堆findByName,findByTitle不用再逐一实现了,实现一个findBy即可拦截其他子虚乌有的findByXXX。
4.强大的String类
a.可以直接在String中嵌入EL, "orderBy ${sortColumn}",省了好多"和+号。
b.hql 可以多行,不用写N多"和+ , 写sql时特别方便。
c.简单集成了正则表达式
If ("name"==~ "na.*")
{println "match!"}
5. 集合与循环的语法
for (car in cars) { println car }
for ( e in map ) { x += e.value}
或者
car.each{print it}
集合也可以直接定义了,如
def myList = ["Rod", 3, Date()]
def myMap = ["Neeta":31, "Eric":34]
6.为JDK的基础类扩展了一系列Helper方法
//原来StringTokenizer类的功能被简单的集成到String类中了
names.tokenize(",").each{......}
其他基础类的扩展见Groovy-JDK
7.简化的Bean定义与赋值
//自动生成Getter和Setter
class Customer
{
Integer id;
String name;
}
//简便的对象赋值
customer = new Customer(id:1, name:"calvin");
customer2 = new CUstomer(id:2);
重新使对象的属性public,对java滥用getter,setter是一种修正。
8. Object内建的反射语法
customer.getAt("name") //得到属性name,
customer.invokeMethod("someFunction") //调用方法someFunction
从此不再需要Apache BeanUtils。
9.GPath--内置的XML语法,和Fremarker类似。
传说中JDK7.0的功能 jdom和Dom4j可以安息了
book = new XmlSlurper().parseText("<book writer='calvin'><title>D</title></book><book writer="B"></book>")
println book.title;
println book[@writer];
println book.children().size();
10.运算符重载
//向数组添加对象
params << customer.getAt(it);
还有如C++的向String,InputStream添加对象.
还有集合类相加,如list1+list2
11.简化了IO操作
12.省略了每行末尾的分号
既然每行都要的,何必多此一举呢?
另外return语句也可以省略,不过我还是习惯写:)
2.Groovy版CustomerDAO的示例:
package com.itorgan.myappfuse.dao;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class CustomerDAOGroovy extends HibernateDaoSupport
{
public insert(customer)
{
getHibernateTemplate().save(customer)
}
public List getAllValid(sortColumn)
{
def hql = """from Customer customer
where customer.status='valid'
order by ${sortColumn}"""
def query = getSession().createQuery(hql)
return query.list()
}
public boolean isUnique(customer, uniqueColumnNames)
{
def params = []
def hql = "select count(*) from Customer customer where "
def first = true
uniqueColumnNames.tokenize(",").each
{
if (!first)
hql += " or "
else
first = false
hql+="customer.${it}=?"
params << customer.getAt(it)
}
def result = getHibernateTemplate().find(hql,params.toArray())
return ( result.get(0) == 0)
}
}
分享到:
相关推荐
Webx是一个基于Groovy的框架,它旨在简化Web应用开发,提供类似于Rails的开发体验,但又保留了Groovy的灵活性和与Java的兼容性。 这个框架的核心特性可能包括: 1. **MVC结构**:Webx可能采用了模型-视图-控制器...
本项目是基于Java语言,采用Spring Boot、MongoDB、Groovy和Elasticsearch等现代技术框架搭建的一个轻量级实时风控系统。以下是这个项目涉及的关键知识点: 1. **Spring Boot**: Spring Boot简化了Spring应用程序...
根据提供的文件信息,我们可以从《Groovy and Grails Recipes》一书中提炼出多个与Groovy语言及Grails框架相关的知识点。下面将详细阐述这些知识点。 ### Groovy编程语言 **1. Groovy简介** - **定义**:Groovy是...
5. **Groovy类库**:Groovy标准库提供了一系列的类和模块,涵盖了集合操作、元编程、XML处理、网络I/O等多个领域,这些类库极大地丰富了Groovy的内置功能。 6. **Gradle集成**:由于Groovy是Gradle的默认脚本语言,...
Groovy的元编程特性使得在运行时修改类的行为成为可能,这在ADF BC中尤其有用,因为有时我们需要根据运行时环境动态调整业务逻辑。此外,Groovy的鸭子类型特性让不同的对象可以使用相同的接口,增加了代码的可复用...
1. **Grails概述**: Grails是一个基于Groovy的全栈Web开发框架,它简化了开发过程,提供了丰富的插件系统和MVC架构。 2. **GORM**: Grails的ORM框架,用于处理数据库操作,支持领域驱动设计(DDD)。 3. **...
Groovy是一种基于Java平台的动态编程语言,设计用于提高开发者的生产力和代码的简洁性。在Java生态系统中,Groovy以其灵活性和与Java的良好互操作性而受到广泛关注。本篇文章将深入探讨Groovy的最新学习动态,特别是...
Grails则是基于Groovy的一个完整的企业级应用框架,它遵循约定优于配置的原则,极大地简化了Web应用的开发过程。Grails集成了许多先进的开源项目和技术,如Spring、Hibernate等,这使得开发者可以更加专注于业务逻辑...
Groovy是一种基于Java平台的动态编程语言,而Grails则是基于Groovy的Web应用框架。 #### 二、核心知识点 ##### 1. Groovy语言基础 - **语法简介**:Groovy语言与Java有着相似的语法结构,但同时支持更灵活的动态...
1. 更简洁的类定义:Groovy允许省略分号、花括号,甚至类声明中的public关键字。 2. 支持闭包:Groovy的闭包类似于函数引用,可以作为参数传递,是函数式编程的重要组成部分。 3. 动态类型:Groovy允许不指定变量...
本文将探讨"MyVo Generate POJOs.groovy"这一Groovy脚本,以及它如何帮助我们自动生成实体类。 Groovy是一种强大的、动态类型的JVM语言,它具有简洁的语法和丰富的库,使得编写脚本变得更加高效。在给定的压缩包...
在本文中,我们将深入探讨如何将Groovy语言与Struts2框架进行集成,特别是在使用Groovy类作为Action的情况。Groovy是一种动态类型的、基于Java平台的编程语言,它提供了简洁的语法和强大的元编程能力,使得开发过程...
Groovy是一种动态、面向对象的编程语言,而Grails则是一个基于Groovy的开源Web应用框架,采用MVC(模型-视图-控制器)架构模式。下面我们将详细介绍如何配置Eclipse插件Grails以及Groovy的相关知识点。 首先,安装...
1. **SpringBoot**: SpringBoot是Spring框架的一个模块,旨在简化Spring应用的初始搭建以及开发过程。它提供了一种快速构建可运行的应用程序的方式,内置了Tomcat服务器和默认配置,使得开发者无需过多关注配置细节...
1. **元编程**:Groovy提供了一套强大的元编程API,允许开发者在运行时修改类的行为或添加新的行为。 - **动态方法调用**:如果一个方法不存在,Groovy会尝试通过其他方式执行。 - **元类**:允许改变类的行为。 ...
Groovy可以调用更新语句,或者使用ORM框架的方法来完成这一过程。 6. **错误处理和日志记录**:在实际开发中,为了确保程序的健壮性,需要添加异常处理机制,并记录详细的执行日志,以便于问题排查和性能优化。 7....
在本文中,我们将深入探讨如何将Google Web Toolkit (GWT) 集成到Grails框架中,构建一个使用Groovy语言的Web应用程序。GWTGrails教程将引导你完成这个过程,首先确保你的系统已经准备好运行Grails和GWT。 ### 准备...
- **元类(MetaClass)**:Groovy中的每个类都有一个元类,元类提供了对类的元数据访问,并且可以被用来扩展或修改类的行为。 - **元编程技术**:本书详细介绍了Groovy中的一些元编程技术,如方法拦截器...