方法拦截器(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 !