¿Se puede utilizar la meta programación Groovy para anular un método privado en una clase Java?

Estoy tratando de anular un método privado en una clase Java usando meta programación. El código se parece a esto:

// Java class
public class MyClass{

    private ClassOfSomeSort property1;
    private ClassOfSomeOtherSort property2;

    public void init(){

        property1 = new ClassOfSomeSort();
        property2 = new ClassOfSomeOtherSort();

        doSomethingCrazyExpensive();
    }

    private void doSomethingCrazyExpensive(){
        System.out.println("I'm doing something crazy expensive");
    }
}

// Groovy class
public class MyClassTest extends Specification{

    def "MyClass instance gets initialised correctly"(){

        given:
        ExpandoMetaClass emc = new ExpandoMetaClass( MyClass, false )
        emc.doSomethingCrazyExpensive = { println "Nothing to see here..." }
        emc.initialize()
        def proxy = new groovy.util.Proxy().wrap( new MyClass() )
        proxy.setMetaClass( emc )
        when:
        proxy.init()
        then:
        proxy.property1 != null
        proxy.property2 != null     
    }
}

El problema es que no se llama a la implementación anulada de doSomethingCrazyExpensive; creo que esto se debe a que el método privado es llamado internamente por el método init () y no a través de metaClass. Si llamo a myProxy.doSomethingCrazyExpensive () directamente, se invoca el método anulado, por lo que la metaprogramación funciona hasta cierto punto.

¿Hay alguna manera de usar la meta programación para anular un método en una clase (o instancia) de Java de tal manera que se llame a la implementación anulada cuando se invoca internamente?

Respuestas a la pregunta(4)

Su respuesta a la pregunta