Yes, this problem still exists.
It is caused by the following: the script implements the GroovyObject interface. Spring will then create a proxy which will also implement the GroovyObject interface. That way the groovy runtime thinks it is a groovy object. The proxy class will also respond like a groovy object. The groovy runtime will receive methods from the real groovy object through the proxy. But the method does not belong to the proxy, so an exception occurs when groovy tries to call the method as if it belonged to the proxy.
In other words, the problem is caused by the fact that the groovy runtime does the discovery of the method to call, and then tries to call this method on the proxy object. If the groovy runtime would just call invokeMethod() on the proxy object everything should work fine. Why isn't it done like that?
I found 2 workarounds:
1. Let the script implement an interface that contains all the methods you want to call through the proxy. That way the proxy will also contain those methods.
2. Remove the refresh-check-delay and use prototype="true". That way live objects don't need refreshing so no proxy is needed. But every time a new instance is requested, spring will check if the script has been modified.