Как изменить атрибуты возвращаемого объекта, используя AspectJ?

У меня есть класс, который выглядит следующим образом (из Spring Roo DataOnDemand), который возвращает новый временный (не постоянный) объект для использования в модульном тестировании. Вот как выглядит код после того, как мы запустили Spring Rooс ITD.

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

Что мне нужно сделать, это сделать дополнительные вызовы на возвращенную ссылку на объект, чтобы установить дополнительные поля, которые Spring Roo 's автоматически сгенерированный метод не заботится. Таким образом, не изменяя вышеуказанный код (или не вставляя его из Roo 's ITD), я хочу сделать еще один звонок:

obj.setName("test_name_" + index);

Чтобы сделать это, я объявил новый аспект, который имеет правильный pointcut и который собирается посоветовать конкретный метод.

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

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

Теперь, согласно Eclipse, pointcut написан правильно и рекомендует правильный метод. Но это неПохоже, это происходит потому, что интеграционные тесты, которые сохраняются на объекте, все еще не выполняются, поскольку атрибут name является обязательным, но не устанавливается. И по словам МэннингаПредполагается, что AspectJ в действии (раздел 4.3.2), после совета может изменять возвращаемые значения. Но, может быть, мне нужно сделать совет вокруг () вместо?

Ответы на вопрос(3)

Ваш ответ на вопрос