앞서 사용한 AOP는 어노테이션 기반이다. 본 글에서는 POJO와 XML 기반으로 변경하겠다.
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.JoinPoint;
@Aspect
public class MyAspect {
// @Before("execution(public void aop002.Boy.runSomething())")
@Before("execution(* runSomething())")
public void before(JoinPoint joinpoint){
System.out.println("얼굴 인식 확인: 문을 개방하라");
// System.out.println("열쇠로 문을 열고 집에 들어간다.");
}
}
@ 어노테이션 기반이라 MyAspect.java가 스프링 프레임워크에 종속적이다.
import org.aspectj.lang.JoinPoint;
public class MyAspect {
public void before(JoinPoint joinpoint){
System.out.println("얼굴 인식 확인: 문을 개방하라");
// System.out.println("열쇠로 문을 열고 집에 들어간다.");
}
}
기존 코드와 비교해 보면 @Aspect 어노테이션과 @Before 어노테이션이 사라졌다. 그래서 MyAspect.java는 스프링 프레임워크에 의존하지 않는 POJO가 된다.
<aop:aspectj-autoproxy />
<bean id="myAspect" class="aop002.MyAspect" />
<bean id="boy" class="aop002.Boy" />
<bean id="girl" class="aop002.Girl" />
<aop:aspectj-autoproxy />
<bean id="myAspect" class="aop003.MyAspect" />
<bean id="boy" class="aop003.Boy" />
<bean id="girl" class="aop003.Girl" />
<aop:config>
<aop:aspect ref="myAspect">
<aop:before method="before" pointcut="execution(* runSomething())" />
</aop:aspect>
</aop:config>
MyAspect.java
에서 사라진 어노테이션들이 POJO & XML 기반 스프링 설정 파일에 태그로 추가되었다.
스프링 입문을 위한 자바 객체지향의 원리와 이해