SpringBoot AOP综合例子
Posted hellohello
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot AOP综合例子相关的知识,希望对你有一定的参考价值。
完整源码:https://github.com/947133297/cgLibDemo
通过AOP来便捷地输出日志,能更加方便排查系统的bug,这个例子中简单输出自定义文件和函数执行时的参数,函数要不要输出日志,可以通过注解来控制。
两个服务类代码如下:
@Service @EnableLogger public class ServiceA { @LogBeforeExec("show方法执行前输出") public void show(int dataA, String dataB, boolean dataC){ System.out.println("ServiceA show方法执行"); } } @Service public class ServiceB { public void show(int dataA, String dataB, boolean dataC){ System.out.println("ServiceB show方法执行"); } }
服务类A中,添加了自定义注解来控制,代表需要输出日志,而服务类B没有添加注解,程序运行效果,不管通过单元测试还是控制器来执行服务代码,都会输出:
show方法执行前输出 - [[1, 2, false]]
ServiceA show方法执行
ServiceB show方法执行
实现原理:通过BeanPostProcessor加工bean,加工过程中通过cgLib织入AOP增强bean的功能。
拓展:因为spring应用中基本都是单例,AOP拦截中获取到的对象都会是同一个,所以可以通过map将被代理对象与某片内存数据关联起来,拦截方法之后,可以做一些方法缓存之类的功能。
以上是关于SpringBoot AOP综合例子的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot默认开启AOP,采用Cglib代理方式?(Spring AOP快速入门)
SpringBoot默认开启AOP,采用Cglib代理方式?(Spring AOP快速入门)