어드바이스에서 리턴값 받아오기
Aspect 역할을 할 클래스(이름을 Aspect로 했습니다. 꼭 그래야 하는건 아니죠;;)에 After Returning 때 weaving 될 어드바이스를 일반 메소드로 정의합니다.
public class Aspect {
public void welcome(){
System.out.println("어서 오세요. 무엇을 도와드릴까요?");
}
public void confirm(){
System.out.println("확인하기");
}
public void afterSellTicket(Ticket ticket){
System.out.println("감사합니다. " + ticket.getMovie().getName() + "을 구매 하셨습니다.");
}
}
그리고 설정파일에 어드바이스를 등록합니다.
<aop:aspect id="cinema" ref="aspect">
<aop:before method="welcome" pointcut-ref="sellTicket" />
<aop:before method="welcome" pointcut-ref="checkTicket" />
<aop:after-returning method="afterSellTicket" pointcut-ref="sellTicket" returning="ticket"/>
</aop:aspect>
<aop:before method="welcome" pointcut-ref="sellTicket" />
<aop:before method="welcome" pointcut-ref="checkTicket" />
<aop:after-returning method="afterSellTicket" pointcut-ref="sellTicket" returning="ticket"/>
</aop:aspect>
@AfterReturning 어드바이스 만들기 이것과 거의 동일한 예제입니다. 결과는 무난히 리턴값을 가져온 것을 확인할 수 있습니다.
@Test
public void sellTicket() {
cinema.sellTicket(movie, new Date());
}
public void sellTicket() {
cinema.sellTicket(movie, new Date());
}
어서 오세요. 무엇을 도와드릴까요?
감사합니다. 공공의적을 구매 하셨습니다.