spring aop 中@annotation()的使用,关于自定义注解,绝壁原创的文章
来源:互联网 发布:大数据服务器配置 编辑:程序博客网 时间:2024/04/28 20:31
在自定义个注解之后,通过这个注解,标注需要切入的方法,同时把需要的参数传到切面去。那么我们怎么在切面使用这个注解。
我们使用这个自定义注解一方面是为了传一些参数,另一方面也是为了省事。
具体怎么省事,看我下面的例子就造啦。
一般,别人的切面都是这么写的
先声明一个切入点。
//切入点签名 @Pointcut("execution(* com.lxk.spring.aop.annotation.PersonDaoImpl.*(..))") private void aa() { }切入点声明OK之后,就是在不同的 advice 里面使用啦。一般都是如下使用。
下面的暂时是不带注解的
//前置通知@Before("aa()")//后置通知@AfterReturning(value = "aa()", returning = "val")public void afterMethod(JoinPoint joinPoint, Object val) {}//最终通知@After("aa()")//环绕通知@Around("aa()")//异常通知@AfterThrowing(value = "aa()", throwing = "ex")public void throwingMethod(Throwable ex) {}这些切面方法里面的参数。JoinPoint joinPoint,这个是哪个都可以加的。加不加随意。需要的话就加。是可以用的。
要是带个咱自定义的注解呢?
我又看到很多人都是如下写的。
我就不全部带上了,就以这个after为例,看看是如何写的吧
@After(value = "aa() && @annotation(methodLog)", argNames = "joinPoint, methodLog")public void methodAfter(JoinPoint joinPoint, MethodLog methodLog) throws Throwable {}
按照上面这写,没毛病,因为别人都是这么写的,我也确实验证啦,这个能拿到咱定义的注解,以及注解上的参数。
还有个写法,就是不用显示的声明切入点,就是那个@Pointcut
先说下这个显示声明的好处,就像声明变量一样,因为这个切入点表达式是可以用 && || !来组合条件的,这么声明的话,可以使得代码简洁。
直接在各类 advice 通知的参数上面,使用execution来声明。
例如:
@Around(value = "(execution(* com.lxk.service..*(..))) && @annotation(methodLog)", argNames = "joinPoint, methodLog")public Object methodAround(ProceedingJoinPoint joinPoint, MethodLog methodLog) throws Throwable {}其实,上面的value里面的意思,就是复合那个切入的点的条件, 以&&连接,也就是说2个都符合。
既然咱自定义了注解,就是来干这个切面的,为啥还要对他是哪个包,要限制一下呢,我就把前面的给删除啦。
最终简化如下:
@Around(value = "@annotation(methodLog)")public Object methodAround(ProceedingJoinPoint joinPoint, MethodLog methodLog) throws Throwable {}代码依然正常运行。
既然不用加那个包的限制,这切面还是OK的,为啥还要加呢?
我稍微考虑下,估计是这么个原因:
自定义注解命名的时候,可能你取的名字很大众化,其他的jar包,也就是你项目引入的jar包,可能有重名的注解,如果要是不加包限制的话,那估计就会出现意想不到的效果。所以,我们就看到,那么多的切面代码,这地方的写法都是千篇一律 都是使用 && 符号。限制包,然后限制使用的是哪个注解。
阅读全文
1 0
- spring aop 中@annotation()的使用,关于自定义注解,绝壁原创的文章
- spring aop的annotation 注解使用
- spring中自定义注解(annotation)与AOP中获取注解
- spring中自定义注解(annotation)与AOP中获取注解
- spring中AOP的Annotation使用流程
- 在spring的aop中获取自定义注解的参数值,即在切面中获取annotation的参数值
- 自定义注解Annotation的使用
- Spring的注解Controller中使用AOP
- spring中aop的简单使用(Annotation方式)
- 关于Spring IOC的注解Annotation
- Spring的AOP支持 使用Annotation方式
- Spring AOP 自定义注解的实现
- Spring AOP 自定义注解的实现
- Java自定义注解Annotation的使用
- spring中annotation的常用注解
- Spring aop +自定义annotation
- 关于注解Annotation的创建和使用
- 基于Spring的AOP实现自定义annotation操作日志
- java学习笔记之 设计模式-套路
- 网络数据读取框架
- tomcat 下的连接文件不能访问解决办法
- 策略模式
- 阿里云ECS服务器用了哪些CPU,值多少钱
- spring aop 中@annotation()的使用,关于自定义注解,绝壁原创的文章
- java串口工具
- Python使用@property
- 【机房重构】--附加数据库出错
- 【软件工程】面向切面编程AOP和装饰器
- Java基本类型之间的相互转换
- Android6.0 Launcher3 修改app字体大小
- 线程用来清理 http连接池无效的链接 :
- 基于twist加密法的代码实现