Jak zmodyfikować atrybuty zwróconego obiektu za pomocą AspectJ?

Mam klasę, która wygląda następująco (z Spring Roo DataOnDemand), która zwraca nowy obiekt przejściowy (nie utrwalony) do użycia w testowaniu jednostkowym. Oto jak wygląda kod po wykonaniu push-up z ITD Spring Roo.

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

To, co muszę zrobić, to wykonać dodatkowe wywołania na zwróconym odwołaniu do obiektu, aby ustawić dodatkowe pola, o które nie radzi sobie automatycznie generowana metoda Spring Roo. Więc bez modyfikowania powyższego kodu (lub wciskając go z ITD Roo), chcę wykonać jedno dodatkowe połączenie:

obj.setName("test_name_" + index);

Aby to zrobić, zadeklarowałem nowy aspekt, który ma właściwy punkt odniesienia i który doradzi konkretną metodę.

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

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

Teraz, zgodnie z Eclipse, pointcut jest napisany poprawnie i zaleca właściwą metodę. Wydaje się jednak, że nie dzieje się tak, ponieważ testy integracyjne, które trwają obiekt, nadal nie działają, ponieważ atrybut name jest wymagany, ale nie jest ustawiany. I zgodnie z AspectJ Manninga w Akcji (sekcja 4.3.2) rada następcza powinna mieć możliwość modyfikowania wartości zwracanych. Ale może zamiast tego muszę poradzić sobie z ()?

questionAnswers(3)

yourAnswerToTheQuestion