Wie ändere ich die Attribute eines zurückgegebenen Objekts mit AspectJ?

Ich habe eine Klasse, die wie folgt aussieht (von Spring Roo DataOnDemand), die ein neues transientes (nicht persistiertes) Objekt zur Verwendung beim Komponententest zurückgibt. So sieht der Code aus, nachdem wir einen Push-In von Spring Roos ITD durchgeführt haben.

public class MyObjectOnDemand {
    public MyObjectOnDemand getNewTransientObject(int index) {
        MyObjectOnDemand obj = new MyObjectOnDemand();
        return obj;
    }
}

Ich muss lediglich zusätzliche Aufrufe für die zurückgegebene Objektreferenz ausführen, um zusätzliche Felder festzulegen, die von der automatisch generierten Spring Roo-Methode nicht berücksichtigt werden. Ohne den obigen Code zu ändern (oder ihn von Roo's ITD einzuschieben), möchte ich also einen weiteren Anruf tätigen:

obj.setName("test_name_" + index);

Zu diesem Zweck habe ich einen neuen Aspekt deklariert, der den richtigen Pointcut hat und der die spezifische Methode empfehlen wird.

public aspect MyObjectDataOnDemandAdvise {
    pointcut pointcutGetNewTransientMyObject() : 
        execution(public MyObject MyObjectDataOnDemand.getNewTransientObject(int));

    after() returning(MyObject obj) : 
        pointcutGetNewTransientMyObject() {
         obj.setName("test_name_" + index);
    }
}

Laut Eclipse ist der Pointcut nun korrekt geschrieben und empfiehlt die richtige Methode. Dies scheint jedoch nicht zu geschehen, da die Integrationstests, die das Objekt beibehalten, immer noch fehlschlagen, da das Attribut name erforderlich ist, aber nicht festgelegt wird. Und laut Mannings AspectJ in Action (Abschnitt 4.3.2) soll der After Advice in der Lage sein, die Rückgabewerte zu ändern. Aber vielleicht muss ich stattdessen einen around () - Rat geben?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage