Groovy 1.5的新特性
http://tech.ddvip.com 2008年01月22日 社区交流
内容摘要:Groovy,针对JVM的类Java动态语言,主要增强了对于Java 5特征的支持,包括注解、泛型和枚举,框架包括Spring,Hibernate,JPA,Goole Guice或者TestNG。
def msg = 'Hello!'
if (msg.metaClass.respondsTo(msg, 'toUpperCase')) {
println msg.toUpperCase()
}
if (msg.metaClass.hasProperty(msg, 'bytes')) {
println foo.bytes.encodeBase64()
}
这些机制在Grails web框架中得到了广泛的使用,例如创建一个动态查找器:由于你可以在一个Book领域类上调用一个findByTitle()动态方法,所以在大多数情况下不需要DAO类。通过元类,Grails自动为领域类加入了这样的方法。此外,如果被调用的方法不存在,在第一次调用的时候方法会被创建并缓存。这可以由下面解释的其他高级技巧来完成。
除了我们已经看到的例子,expando元类也提供了一些补充的功能。在一个expando元类中可以加入四个其他方法:
◆invokeMethod() 让你可以拦截所有的方法调用。
◆而methodMissing() 仅仅在没有发现其他方法的时候被调用。
◆get/setProperty() 拦截对所有属性的访问。
◆而propertyMissing()在没有发现属性的时候被调用。
与以前的Groovy版本相比,通过expando元类可以更容易定制你的应用行为,并且节约昂贵的开发时间。很明显,不是每个人都需要使用这些技术,但是在许多场合这些技术是很方便的,例如你想应用某些AOP(面向方面的编程Aspect Oriented Techniques)来装饰你的类,或者想通过删除某些不必要的冗余代码来简化你的应用的商业逻辑代码并使其可读性更强。
Steroids之上的Swing
Groovy项目有一个天才的Swing开发者团队,他们努力工作使得在Groovy中用Swing来构建用户界面的能力更强大。在Groovy中构建Swing UI的基石是SwingBuilder类:在你的代码中,你可以在语法级别可视化的看到Swing组件是如何彼此嵌套的。Groovy web站点的一个过分简单的例子显示了如何简单地创建一个小的GUI程序:
来源:InfoQ中文站 作者:曹云飞 责编:豆豆技术应用