<p>今天来讲一下用AOP实现日志的功能。</p>
讯享网
首先来说一下什么是AOP
面向切面编程(Aspect-Oriented Programming,AOP)是一种编程范式,旨在将横切关注点(如日志、事务管理、安全等)与业务逻辑分离。在Spring中,AOP通过切面(Aspect)、切点(Pointcut)和通知(Advice)等概念来实现。
- 切面:一个包含切点和通知的模块。
- 切点:定义了在哪些连接点(如方法执行)应用通知的条件。
- 通知:在切点匹配时执行的代码,可以分为前置通知、后置通知、异常通知等。
到这里可能有的小伙伴看不懂,不急接下来我们通过代码慢慢理解
.1. 创建日志切面
讯享网
下面一步步给大家讲一下各代码的作用
- @Aspect:声明该类为切面。
- @Pointcut:定义切点,表示匹配包下的所有公共方法。
- 这里的切点的意思就是说我们要在某个功能的前后去执行我们想要给他添加其他额外功能的部分,说白就是你定义了一个切点,切下来就会在这个切点的前面或后面(根据通知类型来定)去添加我们的功能(例如日志输出)
- @Before:前置通知,表示在匹配的切点方法执行之前会调用方法。
- @After:后置通知,表示在匹配的切点方法执行之后会调用方法。
- 定义的这些通知其实就是你想要增加的功能,我这里的joinPoint.getSignature()你可以改一下,换成你想输出的内容,这个代码的意思就是帮助我们在日志记录、性能监控、异常处理等场景中获取到方法调用的详细信息。例如,在日志切面中,可以记录下每次调用的方法名,以便后续的审计或调试。
- 置通知定义好了切面之后,接下来我们来看具体应用
- 比如这里有个service类
- 这个相信大家都能看懂,这里就不多解释了
- 这里大家回头看一下我们定义的切面
- @Pointcut(“execution(public * com.example.service..*(..))”)
- service包下的所有类,是不是跟我们这个UseSerivce类的位置对应上了,所以说这个UserService类就是切点,意思就是当我们调用这个UserService类的方法时,就会触发我们的切面定义的前置后置通知方法
- 接下来我们来调用一下看看
- 当调用或方法时,日志切面会在方法执行前后输出相应的日志信息。例如:
- 输出结果
讯享网
- 一个一个看
- 为什么会输出
- Before executing: public void com.example.service.UserService.addUser(String)
Adding user: John Doe
After executing: public void com.example.service.UserService.addUser(String) - Before executing: public void com.example.service.UserService.addUser(String)这个是因为我定义的前置通知方法里面的joinPoint.getSignature(),我前面说过了你可以定义成你自己想要输出的东西或逻辑
Adding user: John Doe这个就是我们本身的addUser方法执行的结果
注意看顺序,我们的前置通知方法是不是在addUser方法执行前执行了
After executing: public void com.example.service.UserService.addUser(String)这个输出想必不用解释了吧后置通知,在addUser执行后执行了
OK了,写到这里就写完了,希望对你们有帮助

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/180246.html