当前位置: 首页 > 知识库问答 >
问题:

使用grailsbean定义向一个Spring bean传递闭包

舒仲渊
2023-03-14

有可能有一个包含闭包的bean定义吗?有时,我希望一个类有几乎相同的实例,但在一些小行为上有所不同——不仅仅是数据,所以仅仅在bean定义中传递不同的字段是不够的。

所需bean定义示例:

beans {
    myCustomWidget1(Widget) {
        myClosure = { w -> return w.doThis() }
    }

    myCustomWidget2(Widget) {
        myClosure = { w -> return w.doThat() }
    }
}

示例类:

class Widget {
    Closure myClosure

    ...
}

问题是匿名(内部)Beans已经使用了闭包语法,这些匿名bean在应用程序启动时被计算,而不是设置类的闭包字段。这显然会导致运行时的异常

我以前已经克服了这个问题,我创建了一个小的助手类,注入到我的bean中,行为更改被写成同名的方法。我相信这是正确的方法,但我希望有一个更简洁的“时髦”的方法。

我们使用的是Grails2.4.2,但我相信BeanBuilder会将我想要的闭包视为匿名bean,而不管Grails/groovy版本如何。

共有1个答案

慕朝明
2023-03-14

一种方法是代替这个。。。

beans {
    myCustomWidget1(Widget) {
        myClosure = { w -> return w.doThis() }
    }

    myCustomWidget2(Widget) {
        myClosure = { w -> return w.doThat() }
    }
}

试试这个。。。

beans {
    myCustomWidget1(Widget) { bean ->
        bean.setPropertyValue 'myClosure', { w -> return w.doThis() }
    }

    myCustomWidget2(Widget) { bean ->
        bean.setPropertyValue 'myClosure', { w -> return w.doThat() }
    }
}
 类似资料:
  • 问题内容: 我需要从Java调用C函数。该函数具有以下API: 我正在用Swig做包装纸。 我读了这篇文章: ByteBuffer.allocate()vs.ByteBuffer.allocateDirect() 最好将结果创建为。 如何将传递给代码c(使用swig) C代码如何从ByteBuffer读取和写入数据? 谢谢 问题答案: 来自http://swig.10945.n7.nabble.c

  • 本文向大家介绍vue子组件使用自定义事件向父组件传递数据,包括了vue子组件使用自定义事件向父组件传递数据的使用技巧和注意事项,需要的朋友参考一下 使用v-on绑定自定义事件可以让子组件向父组件传递数据,用到了this.$emit(‘自定义的事件名称',传递给父组件的数据) @increment是子组件this.$emit('increment'自定义的事件,newValue)用来告诉父组件自己干

  • 问题内容: 在flask中,我可以这样做: 并且如果foo.html包含,页面将会显示。但是,如果有一条通往foo的路线怎么办: 在这种情况下,如果我仍然希望这种逻辑发生,那么进入foo.html的唯一方法是通过: 因此,如何使该变量传递到路由,这样我不必在加载路由之前重写重写该路由计算的逻辑代码? 问题答案: 你可以将消息作为显式URL参数传递(正确编码),也可以在重定向之前将消息存储到(coo

  • 问题内容: 我试图获取传递给JOptionPane的自定义按钮返回的值。但是,我通过的按钮根本不返回任何值。仅当按下退出按钮时,才返回-1的值。我需要这样做,因为我正在更改启用或禁用的按钮的属性。我假设我需要按钮以某种方式将某些信息返回给JOptionPane。任何想法? Nb这与我以前的问题有关-JOptionPane灰色输出一个按钮 我尝试像您说的那样设置按钮的值,但是它们从不返回OK或CAN

  • My mainactivity.xml:包括一个textview和ListView。 我的问题是如何使用ArrayAdapter将响应从volley传递到listview?

  • 我最近一直在尝试gRPC错误处理,希望将我自己的proto消息传递给客户端(定义我自己的错误详细信息和内部错误代码)。在四处搜索之后,找到了几个使用gRPC状态包中的WithDetails()附加自定义元数据的示例。我开始实现如下相同的功能 gRPC协议消息 服务器端实现 客户端实现 当我运行代码时,它击中了服务器代码中添加的Panic(),这意味着Wit详细信息()出错了。 为了进一步进行,删除