4.4 Clear

2022-07-11 10:16 更新

攔截器從上到下依次分為 Global、Inject、Class、Method 四個層次,Clear 用于清除自身 所處層次以上層的攔截器。

Clear 聲明在 Method 層時將針對 Global、Inject、Class 進(jìn)行清除。Clear 聲明在 Class 層時 將針對 Global、Inject 進(jìn)行清除。Clear 注解攜帶參數(shù)時清除目標(biāo)層中指定的攔截器。

Clear 用法記憶技巧:

l 共有 Global、Inject、Class、Method 四層攔截器

l 清除只針對 Clear 本身所處層的向上所有層,本層與下層不清除

l 不帶參數(shù)時清除所有攔截器,帶參時清除參數(shù)指定的攔截器


在某些應(yīng)用場景之下,需要移除 Global 或 Class 攔截器。例如某個后臺管理系統(tǒng),配置了 一個全局的權(quán)限攔截器,但是其登錄 action 就必須清除掉她,否則無法完成登錄操作,以下是 代碼示例:

// login方法需要移除該權(quán)限攔截器才能正常登錄
@Before(AuthInterceptor.class)
public class UserController extends Controller {
	// AuthInterceptor 已被Clear清除掉,不會被其攔截
	@Clear
	public void login() {
	}
 
	// 此方法將被AuthInterceptor攔截
	public void show() {
	}
}

Clear 注解帶有參數(shù)時,能清除指定的攔截器,以下是一個更加全面的示例:

@Before(AAA.class)
public class UserController extends Controller {
	@Clear
	@Before(BBB.class)
	public void login() {
	// Global、Class級別的攔截器將被清除,但本方法上聲明的BBB不受影響
	}
 
	@Clear({AAA.class, CCC.class})// 清除指定的攔截器AAA與CCC
	@Before(CCC.class)
	public void show() {
	// 雖然Clear注解中指定清除CCC,但她無法被清除,因?yàn)榍宄僮髦会槍τ诒緦右陨系母鲗?	}
}


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號