spring aop切面表达式详解及例子

spring aop切面表达式详解及例子,第1张

切面类型

execution格式

通配符

例子

一、 execution :使用“ execution (方法表达式)”匹配方法执行;

二、 within :使用“ within (类型表达式)”匹配指定类型内的方法执行;

三、 this :使用“ this (类型全限定名)”匹配当前AOP代理对象类型的执行方法;注意是AOP代理对象的类型匹配,这样就可能包括引入接口方法也可以匹配;注意this中使用的表达式必须是类型全限定名,不支持通配符;

四、 target :使用“ target (类型全限定名)”匹配当前目标对象类型的执行方法;注意是目标对象的类型匹配,这样就不包括引入接口也类型匹配;注意target中使用的表达式必须是类型全限定名,不支持通配符;

五、 args :使用“ args (参数类型列表)”匹配当前执行的方法传入的参数为指定类型的执行方法;注意是匹配传入的参数类型,不是匹配方法签名的参数类型;参数类型列表中的参数必须是类型全限定名,通配符不支持;args属于动态切入点,这种切入点开销非常大,非特殊情况最好不要使用;

六、 @within :使用“ @within (注解类型)”匹配所以持有指定注解类型内的方法;注解类型也必须是全限定类型名;

七、 @target :使用“ @target (注解类型)”匹配当前目标对象类型的执行方法,其中目标对象持有指定的注解;注解类型也必须是全限定类型名;

八、 @args :使用“ @args (注解列表)”匹配当前执行的方法传入的参数持有指定注解的执行;注解类型也必须是全限定类型名;

九、 @annotation :使用“ @annotation (注解类型)”匹配当前执行方法持有指定注解的方法;注解类型也必须是全限定类型名;

十、 bean :使用“ bean (Bean id或名字通配符)”匹配特定名称的Bean对象的执行方法;Spring AOP扩展的,在AspectJ中无相应概念;

既然是基于spring,可以这样:

ResourcePatternResolver rpr = new PathMatchingResourcePatternResolver();

Resource[] res = rprgetResources("classpath: /class"); // classpath:带号会找jar中的class

然后根据resource取clas路径就行

String className = res[0]getURL()getPath();

className = classNamesplit("(classes/)|(!/)")[1];

className = classNamereplace("/", "")replace("class", "");

Object obj = ClassforName(className);

话说我最近也在写一个这样的MVC。。要不咱两合伙? 我写的也是基于注解,不过要支持REST风格

由于在项目中controller层频繁用到log打印入参和回参以及入参的DTO校验,存在很多的重复 *** 作。

最近了解到了aop相关的知识,决定写一个切面来替代这些重复 *** 作。

因为我这里是spring boot 项目,所以加入依赖:

创建自定义注解@BeanValidated:

创建切面处理类:

使用@Slf4j注解需要导入lombok注解,以及在idea中开启lombok,或者也可以自己获取logger

运用切面还可以完成权限验证等功能,大家可以自己试着写一下。

链接: >

以上就是关于spring aop切面表达式详解及例子全部的内容,包括:spring aop切面表达式详解及例子、java 获取所有带注解的类、spring boot使用aop进行入参回参打印和bean参数校验等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9825758.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存