Interceptors是jfinal aop的實現方式,通過實現Interceptor接口以及使用@Before可以
精確進行配置,
Interceptor接口僅僅定了一個方法void intercept(ActionInvocation ai);
我們可以讓一個類實現這個接口,重寫方法,如:
public class DemoInterceptor implements Interceptor {
public void intercept(ActionInvocation ai) {
System.out.println("Before action invoking");
ai.invoke();
System.out.println("After action invoking");
}
}
就寫好了一個攔截器。
攔截器配置有三個級別,global級,controller級,action級。global級的攔截器將對所有的
action進行攔截,controller級攔截器將對該controller中的所以action攔截,action級攔截器
只對該action進行攔截。
global級攔截器在
public void configInterceptor(Interceptors me) {
me.add(new DemoInterceptor());
}
中配置,controller級攔截器使用@Before放在controller類定以前進行配置,action級攔截器
使用@Before放在action定義前進行配置。具體配置如下:
@Before(DemoInterceptor.class) // 配置一個Controller級別的攔截器
public class HelloController extends Controller {
@Before(AaaInterceptor.class)
public void index() {
renderText("配置一個action級別的攔截器");
}
@Before({AaaInterceptor.class, BbbInterceptor.class})
public void test() {
renderText("配置多個action級別的攔截器");
}
@ClearInterceptor
public void login() {
renderText("清除上一級別(Controller級)的攔截器");
}
@ClearInterceptor(ClearLayer.ALL)
public void clearAllLayers() {
renderText("清除所有級別(Global級與Controller級)的攔截器");
}
}