spring aop 拦截指定注解的方法
我的目的:
使用 aop 拦截指定的某些方法,添加自己的业务逻辑处理。
我的效果就是:
execution(@com.my.annotation.MyAnnotation * com.my..*(..))
我的 aop 只拦截在某个包下的所有的带有自定义注解@com.my.annotation.MyAnnotation 的方法。
我想做的事情就:
-
aop 拦截 controller 层:做幂等操作,在一定时间内,同一个 token 的请求只处理第一次,拒绝其他次。
-
aop 拦截 service 层:还是与幂等操作相关,处理某个用户多次提交表单时的类似并发,也就是对某个用户的某份数据的修改是串行化的。第一次处理某个用户的数据未完成时,其他调用修改同一个用户的数据时就阻塞。例如用户的余额的改变。
我的难题
通常 aop 的这样的 execution(* com.my..controller.*.*(..)) 的写法,这就限定了类或者方法名称。而我要实现的是,只要某个方法打上自定义的注解之后,aop 只拦截有这个注解的方法。这样就可以不受限于类和方法名。
execution 表达式
execution(<修饰符模式>?<返回类型模式><方法名模式>(<参数模式>)<异常模式>?)
我只需要把 “<修饰符模式>” 写成我的注解即可。因为方法上的注解也是方法的修饰。