是否可以使用包含Closure的bean定义?有时候,我想要一个类几乎相同的实例,但是在一些小的行为上有区别 - 比数据更多,所以只是在我的bean定义中传递不同的字段是不够的。
示例所需的bean定义:
beans {
myCustomWidget1(Widget) {
myClosure = { w -> return w.doThis() }
}
myCustomWidget2(Widget) {
myClosure = { w -> return w.doThat() }
}
}
示例课程:
class Widget {
Closure myClosure
...
}
问题是Anonymous (Inner) Beans已经使用了闭包语法,并且在应用程序启动时会评估这些匿名bean,而不是设置类的Closure字段。这显然会在运行时导致异常。
我已经克服了以前创建的小助手类,我将其注入到我的bean中,行为更改被写为具有相同名称的方法。我相信这是正确的方法,但我希望有一种更简洁的“时髦”方式。
我们正在使用Grails 2.4.2,但我相信BeanBuilder会将我想要的Closure视为匿名bean,无论grails / groovy版本如何。
答案 0 :(得分:1)
这样做的一种方法是代替......
beans {
myCustomWidget1(Widget) { bean ->
bean.setPropertyValue 'myClosure', { w -> return w.doThis() }
}
myCustomWidget2(Widget) { bean ->
bean.setPropertyValue 'myClosure', { w -> return w.doThat() }
}
}
试试这个......
def listDevices(username, pass, regex):
command = "list-dev " + regex
deviceArray = []
connectString = "plink -ssh -l " + username + " -pw " + pass + " -P " + SshPort + " " + Server + " \"" + command + "\""
rawList = subprocess.check_output(connectString, shell=True)
for line in rawList.split("\r\n"):
if "" is not line:
deviceArray.append(line)
print deviceArray
return deviceArray
Server = 10.10.10.1
SshPort = 22
username = "test"
pass - "password"
regex = "rt*mdr*"
mdrList = listDevices(username, pass, regex)
print mdrList