javaone_JavaOne 2012:Groovy的AST转换概览

javaone

我从希尔顿广场A / B 希尔顿金门大桥3/4/5步行了很短的路程,看到了演示“通过Groovy的AST转型”。 GroovyAST转换是我直接尝试过的几次,但更多地受益于其他人的帮助。 我已经开始阅读Packt Publishing的针对特定领域语言的Groovy》一书,但想参加这个演讲来重新激发我的兴趣,并开始更多地使用这种强大的工具。

Andres AlmirayCanoo )在Groovy AST Transformations上介绍了此演示文稿。 鉴于使用Groovy AST对那些已经对Groovy有所了解的人可能更有吸引力,因此大多数观众都具有Groovy的经验并不令我感到惊讶。

Almiray将AST Transformations定义为“使能编译时元编程”的“基本字节代码生成”。 他表明Groovy有两种类型的AST转换:全局和局部。 今天的演讲重点是全球AST转型。

AST Transformations框架是几年前添加到Groovy的,但是在Groovy 1.7中使事情变得更加容易。 Almiray在Groovy中介绍了Delegate Transformation@Delegate批注),它允许编译后的代码具有显式委派给该字段的所有公共方法。 Almiray解释说@Delegate可以与接口以及类一起使用。 Almiray还解释说,定义的任何新方法都将优先于具有相同签名的任何delgate方法。 同样,遇到的第一个委托优先于其他委托的相同方法签名。

Almiray然后盖上@Singleton辛格尔顿转型 。 Almiray表示,通过此转换实现的单例符合Josh Bloch的Effective Java中描述的安全单例的定义。

@Immutable不可变转换 )。 就像@Singleton转换自动为单例实现所有必要规则一样, @Immutable转换也为不可变实现规则。 Almiray指出,尝试通过属性集与方法集在不可变的Groovy类上设置属性的尝试有不同的例外。

下一个要涉及的Groovy AST转换是@Category类别转换 )。 这是第一个涵盖的转换,需要完全使用Groovy代码(而不是Java代码)中的用法。 还介绍了Mixin转换@Mixin )。

Almiray进入了@Grab报道( Grab Transformation ),这是之前发布的内容@Grab对于在运行时下载依赖项很有用。 我喜欢它的原因与Almiray提到的原因相同:“它非常适合独立脚本。”

Almiray引入了@Synchronized同步转换 )作为指定同步块的Groovier方法 。 Almiray讨论了@Lazy延迟转换 ),该延迟仅用于在实际需要时(首次使用时)初始化值。 Almiray指出了Groovy访问类的私有字段的能力,并警告说,仅应将其用于单元测试,并且仅在生产中绝对必要时使用。

Almiray在使用@BindableBindable Transformation )显示代码示例之前,演示了@NewifyNewify Transformation )的@Bindable ,他说将其添加到Groovy中是为了使其更易于使用Swing。 转换使一个类成为可观察的,并且无需为显式地执行此操作而编写所有代码。 @Vetoable转换类似地使否决属性更改更容易。

正如我在Easy Groovy Logger注入和日志保护一文中所述@Log Log日志转换 )可能非常有用( @ Commons@ Log4j@ Slf4j也是如此 )。

Almiray涵盖了一些我最喜欢且最常用的Groovy转换: @ToString (请参阅我的文章 ), @ EqualsAndHashCode (请参阅我的文章 ), @ TupleConstructor (请参阅我的文章 )或它们的组合( @Canonical –请参阅我的文章)发布 )。

在讨论了@Canonical及其组成转换之后,Almiray转向了覆盖@IndexedProperty相关文章 )。 然后,他列出了其他一些没有代码示例的示例: @AutoClone@AutoExternalize@ConditionalInterrupt@TimedInterrupt@ThreadInterrupt@PackageScope (“在Groovy中获得包级别的访问特定性”), @WithReadLock@WithWriteLock@Field ( “主要用于脚本内部”)。

我很高兴看到Almiray提到添加@TypeChecked以支持“静态Groovy!”。 他引用了稍后有关Groovy 2.0新功能的演示文稿,以获取更多详细信息。

Almiray提到新的转换具体到Grails的@Entity )和格里芬@EventPublisher@PropertyListener@Treading ,更多)。 他还引用了@Scalify@Bytecode

尽管我已经熟悉了本演示文稿涵盖的大部分Groovy AST转换,但是仍然值得参加并学习或提醒其他可用的有用转换。

别忘了分享!

参考: JavaOne 2012:来自JCG合作伙伴 Dustin Marx 的Groovy AST转换的实作 ,在Inspired by Actual Events博客上发表。


翻译自: https://www.javacodegeeks.com/2012/10/javaone-2012-walk-through-of-groovys.html

javaone

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值