方法攔截器(MethodInterceptor)使用

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

發佈了36 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章