У меня есть приложение grails с классами Service, которые наследуются от Groovy's GroovyInterceptable:
class customerSerrvice implements GroovyInterceptable {
private List<Customer> customers
def invokeMethod(String name, args) {
log.debug "=======>INVOKING method [$name] with args:$args"
}
void foo() {
customers.each { doSomething(it) }
}
void doSomething(Customer cust) { log.debug "doSomething invoked with $cust" }
}
Выше очень упрощенное представление, но оно дает вам идею. Если я вызываю foo () или doSomething () напрямую из другого класса, invokeMethod вызывается так, как и должно быть. Однако когда foo () вызывает doSomething (), этот вызов не перехватывается в invokeMethod.
Если я изменюсь с
customers.each { doSomething(it) }
до
for(Customer cust: customers) { doSomething(cust) }
тогда invokeMethod вызывается просто отлично.
Так есть ли что-то в замыканиях и GroovyInterceptable, которые не сочетаются друг с другом? Есть ли способ заставить invokeMethod работать с замыканиями, не меняя их все?
Спасибо