GroovyInterceptable (AOP) и замыкания - PullRequest
       21

GroovyInterceptable (AOP) и замыкания

0 голосов
/ 25 декабря 2010

У меня есть приложение 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 работать с замыканиями, не меняя их все?

Спасибо

1 Ответ

0 голосов
/ 04 января 2011

Подтверждено как ошибка http://jira.codehaus.org/browse/GROOVY-4610

...