[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()。

例子
Global site tag (gtag.js) - Google Analytics