方法拦截器(MethodInterceptor)使用

来源:互联网 发布:网络营销数据分析 编辑:程序博客网 时间:2024/06/01 18:49

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