다음과 같은 클래스가 있습니다 (Spring Roo DataOnDemand). 유닛 테스트에 사용하기 위해 새 임시 항목 (지속되지 않음)을 반환합니다. 이것은 Spring Roo의 ITD에서 push-in을 한 후에 코드가 어떻게 생겼는지를 보여줍니다. 내가해야 할 일은AspectJ를 사용하여 반환 된 객체의 속성을 수정하는 방법은 무엇입니까?
public class MyObjectOnDemand {
public MyObjectOnDemand getNewTransientObject(int index) {
MyObjectOnDemand obj = new MyObjectOnDemand();
return obj;
}
}
봄 루의 자동 생성 방법의 치료를 참가하는 추가 필드를 설정하는 반환 된 객체 참조에 추가로 통화를 할 수 있습니다.
obj.setName("test_name_" + index);
이렇게하려면, 내가 선언 한 적절한 포인트 컷을 가지고있는가는되어 새로운 측면 : 그래서 위의 코드를 수정 (또는 루의 ITD에서 밀어)하지 않고, 나는 하나 개의 추가 통화를 할 특정 방법을 조언합니다.
public aspect MyObjectDataOnDemandAdvise {
pointcut pointcutGetNewTransientMyObject() :
execution(public MyObject MyObjectDataOnDemand.getNewTransientObject(int));
after() returning(MyObject obj) :
pointcutGetNewTransientMyObject() {
obj.setName("test_name_" + index);
}
}
이제 이클립스에 따르면 포인트 컷은 올바르게 작성되었으며 적절한 방법을 조언하고 있습니다. 그러나 name 속성이 필요하지만 설정되지 않기 때문에 객체를 지속하는 통합 테스트가 여전히 실패하기 때문에 상황이 발생하지 않는 것 같습니다. 그리고 Manning의 AspectJ in Action (4.3.2 절)에 따르면 after advice는 리턴 값을 수정할 수 있어야한다. 하지만 어쩌면 around() 조언을 대신 할 필요가 있을까요?