4.2 Interceptor

2022-07-11 10:15 更新

  Interceptor 可以對(duì)方法進(jìn)行攔截,并提供機(jī)會(huì)在方法的前后添加切面代碼,實(shí)現(xiàn) AOP 的 核心目標(biāo)。Interceptor 接口僅僅定了一個(gè)方法 void intercept(Invocation inv)。以下是簡(jiǎn)單的示例:

public class DemoInterceptor implements Interceptor {
	public void intercept(Invocation inv) { System.out.println("Before method invoking"); inv.invoke();
	System.out.println("After method invoking");
	}
}

以上代碼中的 DemoInterceptor 將攔截目標(biāo)方法,并且在目標(biāo)方法調(diào)用前后向控制臺(tái)輸出 文本。inv.invoke()這一行代碼是對(duì)目標(biāo)方法的調(diào)用,在這一行代碼的前后插入切面代碼可以很 方便地實(shí)現(xiàn) AOP。


Invocation 作為 Interceptor 接口 intercept 方法中的唯一參數(shù),提供了很多便利的方法在攔 截器中使用。以下為 Invocation 中的方法:

方法

描述

void invoke()

傳遞本次調(diào)用,調(diào)用剩下的攔截器與目標(biāo)方法

Controller getController()

獲取 Action 調(diào)用的 Controller 對(duì)象(僅用于控制層攔截)

String getActionKey()

獲取 Action 調(diào)用的 action key 值(僅用于控制層攔截)

String getControllerKey()

獲取 Action 調(diào)用的 controller key 值(僅用于控制層攔截)

String getViewPath()

獲取 Action 調(diào)用的視圖路徑(僅用于控制層攔截)

<T> T getTarget()

獲取被攔截方法所屬的對(duì)象

Method getMethod()

獲取被攔截方法的 Method 對(duì)象

String getMethodName()

獲取被攔截方法的方法名

Object[] getArgs()

獲取被攔截方法的所有參數(shù)值

Object getArg(int)

獲取被攔截方法指定序號(hào)的參數(shù)值

<T> T getReturnValue()

獲取被攔截方法的返回值

void setArg(int)

設(shè)置被攔截方法指定序號(hào)的參數(shù)值

void setReturnValue(Object)

設(shè)置被攔截方法的返回值

boolean isActionInvocation()

判斷是否為 Action 調(diào)用,也即是否為控制層攔截


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)