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'
}
}