方法攔截器(MethodInterceptor)使用
package cuigh.spring.aop.step01;
/*
* 功能:目標類
* */
public class MessageWriter {
public void writeMessage(String name){
System.out.print(" World ");
}
public void writeMessage2(){
System.out.print("World 2 ");
}
}
package cuigh.spring.aop.step01;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
/*
* 功能:代理類,在目標方法之前(System.out.print("Hello ");)、
* 之後增加邏輯(System.out.println(" !");)。
* MethodInterceptor 方法攔截器
*
* */
public class MessageDecorator implements MethodInterceptor {
@Override
public Object invoke(MethodInvocation arg0) throws Throwable {
System.out.println("被攔截的方法名稱="+arg0.getMethod().getName());
System.out.print("Hello ");
Object verVal = arg0.proceed();
System.out.println(" !");
return verVal ;
}
}
package cuigh.spring.aop.step01;
import org.springframework.aop.framework.ProxyFactory;
public class HelloWorldAOPExample {
/*
* 功能:演示
* */
public static void main(String[] args) {
//目標類
MessageWriter target = new MessageWriter();
//通知類
MessageDecorator advice = new MessageDecorator();
//獲得代理工廠
ProxyFactory pf = new ProxyFactory();
//設置目標類
pf.setTarget(target);
//設置通知類,Weaving
pf.addAdvice(advice);
//獲得目標類的代理類
MessageWriter proxy = (MessageWriter)pf.getProxy();
target.writeMessage("zhang");
System.out.println("\n-------------");
proxy.writeMessage("wang");
System.out.println("\n-------------");
proxy.writeMessage2();
}
}
輸出結果:
World
-------------
被攔截的方法名稱=writeMessage
Hello World !
-------------
被攔截的方法名稱=writeMessage2
Hello World 2 !