SpringBoot应用AOP及各注解的执行顺序 统一AOP切面
admin
2024-01-25 04:55:28
0

SpringBoot应用AOP及各注解的执行顺序 统一AOP切面

1、先确定要切入的点(就是需要访问那些类或名称等的切入点)

2、比如切入点是所有的ServiceImpl类,当访问所有的ServiceImpl列为切入点;当然也可以是其它的,比如mapper做主从切换思路时切入点就设为mapper也是可以的。

ServiceImpl类

package com.demo.system.ServiceImpl;@Override
public class demoServiceImpl  implements demoService
{@Overridepublic void selectDemo(int i, int j){System.out.println("正常业务方法....");return i / j;}
}

切面类

	/*** spring AOP  切入点*/@Aspect@Componentpublic class csAspect {//定义一个切点,表达式可以灵活运用,我这个表达式是表示MathCalculator类中所有的方法都进行切入  @Pointcut("execution(* com.demo.system.ServiceImpl..*.*(..))")public void pointCut () {}//方法执行开始之前@Before("pointCut()")public void logStart (JoinPoint joinPoint) {System.out.println("除法运行...参数:{"+ Arrays.asList(joinPoint.getArgs())+"}");}//环绕通知@Around("pointCut()")public Object logAround (ProceedingJoinPoint joinPoint) throws Throwable {//原方法执行之前会打印这个日志System.out.println("环绕通知...  开始");//执行原方法Object obj = joinPoint.proceed();//原方法执行结束,打印这行日志System.out.println("环绕通知...  结束");//返回方法返回参数return obj;}//方法执行开始之后@After("pointCut()")public void logEnd (JoinPoint joinPoint) {System.out.println("除法结束..." + joinPoint.getSignature().getName());}//当方法进行返回的时候,returning属性是指定方法参数中的result来接收返回参数,这样就可以修改返回参数@AfterReturning(value = "pointCut()", returning = "result")public void logReturn (JoinPoint joinPoint, Object result) {System.out.println("除法正常返回... 返回结果:{"+result+"}");}//当方法执行异常的时候,throwding是指定方法参数中的e来接收异常参数,可以查看发生的什么异常@AfterThrowing(value = "pointCut()", throwing = "e")public void logException (JoinPoint joinPoint, Exception e) {System.out.println("异常... 异常信息:{"+e+"}");}}

运行结果

	环绕通知...  开始除法运行...参数:{[1, 1]}正常业务方法....环绕通知...  结束除法结束...div除法正常返回... 返回结果:{1}

运行的顺序是

  • 1、@Around(方法执行开始之前,相当于进入切入点的类,但还没开始访问类的方法进行的前半段代码,以point.proceed()为止,触发point.proceed()后,进入@Before)
  • 2、@Before(方法执行开始之前)
  • 3、原方法
  • 4、@Around(衔接 1 方法进行后半段代码,整个方法全部执行完,进入@After)
  • 5、@After (方法执行开始之后)
  • 6、@AfterReturning(若目标方法无异常,执行@AfterReturning注解方法的业务逻辑)
  • 7、@AfterThrowing(若目标方法有异常,执行@AfterThrowing注解方法的业务逻辑)

参考网站:https://zhuanlan.zhihu.com/p/560455607

需要注意的是:@Pointcut、@Before、@After等注解内的“切入点”配置有很多说明,有些是针对方法注解使用(自定义注解),有些是针对正常普通方法使用,选择不同的配置获取的类信息对象也是不一样,如果是获取自定义注解的信息使用ProceedingJoinPoint,如果是普通方法类信息使用JoinPoint

参考: https://blog.csdn.net/m0_37840000/article/details/80905791

ProceedingJoinPoint和JoinPoint区别参考:
https://blog.csdn.net/m_shang/article/details/114538561

相关内容

热门资讯

你身边有钱人的生活是何种样子的... 你身边有钱人的生活是何种样子的?越有钱越大方,人家又钱啥都不在乎,到那不管办啥事都显的特大方。这就是...
女子三步上篮要领 女子三步上篮要领带球过半场 然后在离篮筐还有3米时收球 双手抱好球保护好 然后进行3步上篮 在跳起来...
第八号时间当铺是真的还是假的 第八号时间当铺是真的还是假的昨天我在第八号时间当铺这个网站上面看见一个“本站招聘各大院校校花做特约嘉...
今年秋冬季节流行什么样式的衣服... 今年秋冬季节流行什么样式的衣服?流行的感觉源于那呢?:流行的,的确也是当年最大众化的!服饰商人赚的最...
自卑到骨子里是什么感觉? 自卑到骨子里是什么感觉?自卑会感觉到说话没有底气,为别人考虑的多,为自己考虑的少,对别人的谈话太过于...
关于青春的吉他歌曲 关于青春的吉他歌曲本人很喜欢纯美的感觉,要这种关于青春内容的吉他弹唱歌曲,就像《模范情书》、《同桌的...
上刀山,下火海是什么意思? 上刀山,下火海是什么意思?山山水水勿忘我勿忘我外
绩效薪酬怎么去计算?有什么依据... 绩效薪酬怎么去计算?有什么依据呢?一般都是根据自己的工资加上自己的提成,以及加上自己的绩效进行计算工...
百世流什么什么质蕙心? 百世流什么什么质蕙心?百世流芳,淑质蕙心。百世(流芳)也作流芳百世 liú fāng bǎi shì...
什么是“吟唱”? 什么是“吟唱”?是游戏里面的…!如同吟诗一样,又似乎在唱形容歌声很好听很传神吧应该是朗读中带一点唱吧...
校花的全能保安还会更吗 校花的全能保安还会更吗更如果这个小说的关注量比较多的话那么作者就会有相应的收入他肯定还会持续的进行更...
烟台南山学院属于大专还是大学 烟台南山学院属于大专还是大学我要听是实就是个大专院校。地方在南山。是本科。三本,不过是民办教育全日制...
你家爸爸是隐形爸爸吗? 你家爸爸是隐形爸爸吗?不是,爸爸一直会陪着孩子玩,陪着孩子看书写作业,是非常负责任的好爸爸。算是吧。...
尼斯湖水怪是真的吗 尼斯湖水怪是真的吗是一只大象!
求电影名.有卫诗雅.金刚.陆永 求电影名.有卫诗雅.金刚.陆永台北夜蒲团团转
男朋友备注搞笑的昵称大全 男朋友备注搞笑的昵称大全对于恋爱中的人来说,会喜欢唤对方,但怎么称呼对方好像成了一个很有趣而且比较固...
水滴石穿造句 水滴石穿造句水滴石穿的造句:1、经过多年的努力,他的研究终于有了突破,这正是水滴石穿、积少成多的结果...
急求携程网订机票的详细步骤! 急求携程网订机票的详细步骤!请说的详细一点,谢谢! 或者如果其他网站有更便宜方便的 也请推荐,谢谢...
山河为证:尧山重建的磅礴之力 一场突如其来的暴雨,让尧山风景区遭受重创。曾经的上山道、下山道被冲毁得七零八落,电线杆、变压器、石桥...