[Groovy] 将Groovy脚本映射成Spring的Bean
wurenjian
2010-01-19
将Groovy脚本映射成Spring的Bean
Spring提供了对脚本语言的支持,这使得我们可以为应用程序定义各种脚本语言(如Groovy)的bean。脚本语言(Groovy)的Bean最大的好处是“refresh”,即:源文件发生改变时可以自动重新加载。在Spring的文档中只有将Groovy类映射成为Spring Bean的例子,那么我们可不可以将Groovy脚本映射成Spring Bean呢?RoshanDawrani在GROOVY ZONE的文章《Groovy Spring Integration: Using Groovy Scriptlets as Spring Beans》,可以回答我们的问题。 在Groovy中,脚本可以说是Groovy类的一种简写方式。请看下面的脚本(Manners.groovy): package groovyspring.script user1 = new User(name: 'Mr X') user2 = new User(name: 'Mr Y') sayHiAndBye() def sayHiAndBye() { println "Hi, ${user1.name}" println "Bye, ${user2.name}" } 和它等价的Groovy类: package groovyspring.script class Manners { def user1, user2 static main(args) { def m = new Manners() m.user1 = new User(name: 'Mr X') m.user2 = new User(name: 'Mr Y') m.sayHiAndBye() } def sayHiAndBye() { println "Hi, ${user1.name}" println "Bye, ${user2.name}" } } Groovy脚本是不是比Groovy类简洁好多呢?虽然它们是等价的,但还是有一些不同。我们都知道Groovy会自动为类的成员变量产生get和set方法,脚本就没有这么好的待遇了。由于前面的原因,Spring在创建Bean实例的时候就不能通过set方式为脚本变量赋值,除非你自己定义set方法。除了使用set方法外,RoshanDawrani还介绍了另外一种绑定脚本参数的方式:使用Spring的GroovyObjectCustomizer接口调用GroovyObject的setProperty()。 例子 |