groovy 查看类有哪些属性和方法的函数

groovy 查看类有哪些属性和方法的函数,第1张

Groovy的动态特性允许对象和类都能够在运行期动态地添加方法属性,在复杂的应用场景,我们很难判断一个具体的对象是否有某个方法。

也有这么一个应用场景,是我所经历到的,Groovy脚本代码被不同的Java应用系统加载,脚本依赖于各个应用系统提供的java环境运行,这个环境

包括当前应用的classpath中有哪些jar包,jar包版本等等,以及由具体应用系统通过bingding对象向脚本中注入的一系列的作为技术服务的bean,

比如获取数据的接口bean。有时候我们各个性用系统的这些环境不一致,导致运行同一个Groovy脚本出现错误,很多由于jar包版本的原因,出现找不到

方法,找不到属性的情况。这就要求我们这在运行时动态判断对象的属性和方法是否存在。好在Groovy在1.1之后就提供了这样的判定支持。具体来看

首先,我们声明了Foo类,包含了一个name属性和一个方法。

通过对象的MetaClass的hasProperty方法我们可以判定并获得该属性对象的引用,

通过MetaClass的respondsTo我们可以判定并获得该方法的引用

为了增强程序的灵活性,可以使二次开发者自己编写相应的gsp文件并保存在数据库中,这样在显示页面时就能显示出自定义的页面了。这里主要是想要用方便的gsp页面,而不是纯粹的html或freemark标记。

为了实现这个功能,相应的方式有:

在config.groovy中使用动态加载gsp功能,同时修改gsp的目录:

grails.gsp.enable.reload = true

grails.gsp.view.dir = "/path/to/gsp/dir"

这样可以把用户保存的gsp内容生产到相应的gsp目录下,这样就能自动加载动态的gsp页面了。

另外使用:

package com.mycompany

import groovy.text.Template

import org.codehaus.groovy.grails.web.pages.GroovyPagesTemplateEngine

class TemplatingService {

GroovyPagesTemplateEngine groovyPagesTemplateEngine

def render(String templateString, Map model) {

ByteArrayInputStream bais = new ByteArrayInputStream(templateString.getBytes())

Template template = groovyPagesTemplateEngine.createTemplate(bais)

try {

def writer = new StringWriter()

template.make(model).writeTo(writer)

return writer.toString()

} catch (Exception e) {

// handle exception

return ""// or "[an error occurred]" or rethrow the exception

}

}

}

为了提高速度,可以把createTemplate的结果缓存起来。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11457478.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存