Como modificar os atributos de um objeto retornado usando AspectJ?

Eu tenho uma classe que se parece com o seguinte (do Spring Roo DataOnDemand), que retorna um novo objeto transitório (não persistente) para uso no teste de unidade. É assim que o código se parece depois que fazemos um push-in do ITD do Spring Roo.

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

O que eu preciso fazer é fazer chamadas adicionais na referência do objeto retornado para definir campos adicionais que o método gerado automaticamente pelo Spring Roo não está cuidando. Então, sem modificar o código acima (ou empurrá-lo do ITD do Roo), eu quero fazer uma chamada adicional:

obj.setName("test_name_" + index);

Para fazer isso, eu declarei um novo aspecto que possui o pointcut apropriado e que irá aconselhar o método específico.

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

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

Agora, de acordo com o Eclipse, o pointcut está escrito corretamente e está aconselhando o método correto. Mas isso não parece estar acontecendo porque os testes de integração que persistem no objeto ainda estão falhando porque o atributo name é obrigatório, mas não está sendo definido. E de acordo com AspectJ de Manning em Ação (seção 4.3.2), o conselho posterior deve ser capaz de modificar os valores de retorno. Mas talvez eu precise fazer um conselho ao redor?

questionAnswers(3)

yourAnswerToTheQuestion