AOP 개념
조인포인트(joinpoint) : 애플리케이션 중의 특별한 지점 메서드 호출, 메서드 실행자체, 클래스 초기화, 객체성생
어드바이스(advice) : 조인 포인트에 실행되는 코드
포인트컷(pointcuts) : 조인 포인트의 집합체 어드바이스 실행을 정의
애스팩트(aspect) : 어드바이스와 포인트의 조합
위빙(weaving) : 애스펙트를 주입하는 과정
타켓(target) : 자신의 실행 흐름이 어떠한 aop처리로 인해 수정되는 객체
인트로덕션(introduction) : 객체구조를 수정하여 새로운 메서드나 그 필드를 추가할 수 있는 처리
AOP를 이용한 "Hello, World"
MessageWriter 클래스
package com.lastjava.spring.ch05.simple;
public class MessageWriter {
public void writeMessage(){
System.out.print("World");
}
}
public class MessageWriter {
public void writeMessage(){
System.out.print("World");
}
}
MessageDecorator 클래스
package com.lastjava.spring.ch05.simple;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
public class MessageDecorator implements MethodInterceptor{
public Object invoke(MethodInvocation invocation) throws Throwable {
System.out.print("Hello ");
Object retVal = invocation.proceed();
System.out.println("!");
return retVal;
}
}
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
public class MessageDecorator implements MethodInterceptor{
public Object invoke(MethodInvocation invocation) throws Throwable {
System.out.print("Hello ");
Object retVal = invocation.proceed();
System.out.println("!");
return retVal;
}
}
MessageDecorator 클래스
package com.lastjava.spring.ch05.simple;
import org.springframework.aop.framework.ProxyFactory;
public class HelloWorldWeaver {
public static void main(String[] args){
MessageWriter target = new MessageWriter();
ProxyFactory pf = new ProxyFactory();
pf.addAdvice(new MessageDecorator());
pf.setTarget(target);
MessageWriter proxy = (MessageWriter) pf.getProxy();
target.writeMessage();
System.out.println("");
proxy.writeMessage();
}
}
import org.springframework.aop.framework.ProxyFactory;
public class HelloWorldWeaver {
public static void main(String[] args){
MessageWriter target = new MessageWriter();
ProxyFactory pf = new ProxyFactory();
pf.addAdvice(new MessageDecorator());
pf.setTarget(target);
MessageWriter proxy = (MessageWriter) pf.getProxy();
target.writeMessage();
System.out.println("");
proxy.writeMessage();
}
}
결과물
World
Hello World!
Hello World!