Schema 기반 Introduction
Introduction 예제 와 동일한 예제입니다. <aop:declare-parents> 를 사용하였다는 것만 다르죠. 흐흣;;
새로 추가할 메소드를 가진 인터페이스와 그것을 구현한 클래스르 만듭니다.
public interface TicketTracked {
void incrementTicketCount();
}
void incrementTicketCount();
}
public class TicketTrackedImpl implements TicketTracked {
static int count = 0;
public void incrementTicketCount() {
System.out.println("표 " + (++count) + " 장 팔았다.");
}
}
그리고 this()를 사용하여 포인트컷을 만들어 줍니다.
<aop:pointcut id="countTicket"
expression="execution(* sell*(..)) and this(ticketTracked)"/>
expression="execution(* sell*(..)) and this(ticketTracked)"/>
다음 이 포인트 컷을 사용할 introduction을 설정해 줍니다. 이 설정은 <aop:aspect> 바로 아래에 있어야 합니다. 안그럼 에러나 나더군요~
<aop:declare-parents
types-matching="aop.newStyle.domain.KeesunCinema"
implement-interface="aop.newStyle.aspect.TicketTracked"
default-impl="aop.newStyle.aspect.TicketTrackedImpl" />
<aop:after method="ticketTtrack" pointcut-ref="countTicket"/>
types-matching="aop.newStyle.domain.KeesunCinema"
implement-interface="aop.newStyle.aspect.TicketTracked"
default-impl="aop.newStyle.aspect.TicketTrackedImpl" />
<aop:after method="ticketTtrack" pointcut-ref="countTicket"/>
그리고 테스트를 해보면 원하는 결과를 확인할 수 있습니다.
@Test
public void sellTicket() {
cinema.sellTicket(movie, new Date());
}
public void sellTicket() {
cinema.sellTicket(movie, new Date());
}
어서 오세요. 무엇을 도와드릴까요?
어서 오세요. 무엇을 도와드릴까요?
왔어? 영화 뭐 볼껀데?
하이 공공의적보려고?
표 1 장 팔았다.
감사합니다. 공공의적을 구매 하셨습니다.
쌩큐 공공의적잘봐!