标签:sso boolean 代理 实现原理 对象 bsp 服务 bool out
完整源码: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将被代理对象与某片内存数据关联起来,拦截方法之后,可以做一些方法缓存之类的功能。
标签:sso boolean 代理 实现原理 对象 bsp 服务 bool out
原文地址:https://www.cnblogs.com/hellohello/p/10291617.html