JFinal AOP学习笔记

本文详细介绍了Java中拦截器(Interceptor)的实现方式及其应用场景。包括如何通过实现Interceptor接口来自定义拦截器,Invocation接口中提供的各种方法介绍,以及Before注解在Class和Method级别上的使用。同时讲解了全局拦截器、Inject拦截器的概念,并解释了Clear注解的作用。
摘要由CSDN通过智能技术生成

实现Interceptor接口

public class DemoInterceptor implements Interceptor{
    public void intercept(Invocation invocation) {
        System.out.println("类拦截器触发方法前");
        invocation.invoke();
        System.out.println("类拦截器触发方法后");
    }
}

 

以下为Invocation中的方法:

方法描述
void invoke()传递本次调用, 调用剩下的拦截器与目标方法
Controller getController()获取 Action 调用的 Controller 对象( 仅用于控制层拦截)
String getActionKey()获取 Action 调用的 action key 值( 仅用于控制层拦截)
String getControllerKey()获取 Action 调用的 controller key 值( 仅用于控制层拦截)
String getViewPath()获取 Action 调用的视图路径( 仅用于控制层拦截)
<T> T getTarget()获取被拦截方法所属的对象
Method getMethod()获取被拦截方法的 Method 对象
String getMethodName()获取被拦截方法的方法名
Object[] getArgs()获取被拦截方法的所有参数值
Object getArg(int)获取被拦截方法指定序号的参数值
<T> T getReturnValue()获取被拦截方法的返回值
void setArg(int)设置被拦截方法指定序号的参数值
void setReturnValue(Object)设置被拦截方法的返回值
boolean isActionInvocation()判断是否为 Action 调用,也即是否为控制层拦截

Before注解,可配置Class、Method级别的的拦截器

// 配置一个Class级别的拦截器,她将拦截本类中的所有方法
@Before(AaaInter.class)
public class BlogController extends Controller {
// 配置多个Method级别的拦截器, 仅拦截本方法
@Before({BbbInter.class, CccInter.class})
public void index() {
}
// 未配置Method级别拦截器, 但会被Class级别拦截器AaaInter所拦截
public void show() {
}
}

全局拦截器

public void configInterceptor(Interceptors me) {
        //控制层拦截器  发起action请求时,调用
        me.addGlobalActionInterceptor(new GlobalActionInterceptor());
        //服务层拦截器
        //使用Duang.duang(),Enhancer.enhance(),Controller.enhance()调用方法时,调用
        me.addGlobalServiceInterceptor(new GlobalServiceInterceptor());
    }

Inject 拦截器

public void injectDemo() {
// 为enhance方法传入的拦截器称为Inject拦截器,下面代码中的Tx称为Inject拦截器
OrderService service = Enhancer.enhance(OrderService.class, Tx.class);
service.payment(…);
}

Inject拦截器可被认为是Class级拦截器,但是次序在Class级拦截器前

 

Clear 注解用于清除声明在 Method 以外的拦截器,也即只能清除 Global、 Class 或 Inject
拦截器。
Clear 用法记忆技巧:
 不带参数时清除所有拦截器
 带上参数时只清除该参数指定的拦截器
 清除操作仅作用于 Method 之外声明的拦截器
 


 

 


 


 

转载于:https://my.oschina.net/zhuqianli/blog/821451

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值