SpringBoot AOP综合例子
2024-09-04 18:04:46
完整源码: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将被代理对象与某片内存数据关联起来,拦截方法之后,可以做一些方法缓存之类的功能。
这个输出日志的功能,可能其他工程也需要。所以可以抽取出来以便于复用,抽取方式:将BeanPostProcessor的bean抽取到一个单独的配置类X中,然后通过@Import将配置类X引入到当前工程中即可。X类相关的东西都存放到一个单独的jar包中。
最新文章
- 解决asp.net mvc的跨域请求问题
- ORACLE查看SQL的执行次数/频率
- Caused by: java.sql.BatchUpdateException: Transaction error, need to rollback. errno:1205 Lock wait timeout exceeded; try restarting transaction
- linux服务器使用
- (String) | String.valueOf()
- 测试GeoGebra博客
- SQL SERVER提供了大量的WINDOWS和SQLSERVER专用的排序规则
- 什么是 .manifest 文件
- U3D 脚本添加和获得对象
- linux 日常命令(磁盘空间)
- Python 引用、浅拷贝、深拷贝解析
- acm->;stl
- 笔记+R︱风控模型中变量粗筛(随机森林party包)+细筛(woe包)
- R语言︱构造新序列
- SpringMvc+AngularJS通过CORS实现跨域方案
- spark伪分布式的安装
- 【转】Python 内置函数 locals() 和globals()
- python-----函数参数类型
- Android GPS定位测试(附效果图)
- spring基于通用Dao的多数据源配置详解【ds1】
热门文章
- Java面向对象_常用类库api——二分查找算法
- Java NIO基本使用介绍
- Have启动报错:java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
- java使用线程请求访问每次间隔10分钟连续5次,之后停止请求
- jQuery读取和设定KindEditor值的方法
- centos执行apt-get提示不存在
- Bootstrap学习笔记(三)
- Django之model基础(查询补充)
- Vue.js(2.x)之插值
- java集合杂谈