Spring Groovy DSL匿名内部bean及其构造函数

Spring Groovy DSL匿名内部bean及其构造函数,spring,grails,groovy,Spring,Grails,Groovy,考虑到这两个因素: myMessageAdapter(MessageListenerAdapter) { bean -> bean.constructorArgs = [ref('jmsReceiver')] defaultListenerMethod = 'processMessage' } listenerContainer(DefaultMessageListenerContainer) { connectionFactory = ref('connecti

考虑到这两个因素:

myMessageAdapter(MessageListenerAdapter) { bean ->
    bean.constructorArgs = [ref('jmsReceiver')]
    defaultListenerMethod = 'processMessage'
}

listenerContainer(DefaultMessageListenerContainer) {
    connectionFactory = ref('connectionFactory')
    destinationName = "MyDest"
    messageListener = ref('myMessageAdapter')
}
我想用匿名内部bean替换
myMessageAdapter

尝试:

listenerContainer(DefaultMessageListenerContainer) {
    connectionFactory = ref('connectionFactory')
    destinationName = "MyDest"
    messageListener = { MessageListenerAdapter bean ->
        bean.constructorArgs = [ref('jmsReceiver')]
        defaultListenerMethod = 'processMessage'
    }
}
但由于“无法在空对象上设置属性'constructorArgs'”而失败


如何传递构造函数参数?

当您查看BeanBuilder的源代码和方法setPropertyOnBeanConfig

时,我认为这是不可能的。当您查看BeanBuilder和方法setPropertyOnBeanConfig的源代码时,实现这一点的方法是设置类在bean闭包中:

listenerContainer(DefaultMessageListenerContainer) {
    connectionFactory = ref('connectionFactory')
    destinationName = "MyDest"
    messageListener = { bean ->
        bean.beanClass = MessageListenerAdapter 
        bean.constructorArgs = [ref('jmsReceiver')]
        bean.defaultListenerMethod = 'processMessage'
    }
}

实现这一点的方法是在bean闭包中设置类:

listenerContainer(DefaultMessageListenerContainer) {
    connectionFactory = ref('connectionFactory')
    destinationName = "MyDest"
    messageListener = { bean ->
        bean.beanClass = MessageListenerAdapter 
        bean.constructorArgs = [ref('jmsReceiver')]
        bean.defaultListenerMethod = 'processMessage'
    }
}