使用Aspect,既可以帮助我们监控类方法的运行情况,也可以解耦,不侵入业务代码。

代码实现

@Aspect
@Component
public class ServiceLogAspect {/*** AOP通知主要有5种* 1. 前置通知@Before:方法调用前执行* 2. 后置通知@AfterReturning:方法调用后执行* 3. 环绕通知@Around:方法调用前后通知* 4. 异常通知@AfterThrowing:方法发生异常通知* 5. 最终通知@After:最终final通知,不管是否异常都会通知*/private static final Logger logger =LoggerFactory.getLogger(ServiceLogAspect.class);/*** AOP切面表达式* execution 代表所要执行的表达式主体* 第一处 * 代表方法返回类型 *代表所有类型* 第二处 包名代表aop监控的类所在的包* 第三处 .. 代表该包以及其子包下的所有类方法* 第四处 * 代表类名,*代表所有类* 第五处 *(..) *代表类中的方法名,(..)表示方法中的任何参数*/@Around("execution(* com.lzp.service.impl..*.*(..))")public Object recordServiceTimeLog(ProceedingJoinPoint joinPoint) throws Throwable {logger.info("====== 开始执行{}.{} ======",joinPoint.getTarget().getClass(), // service 实现类joinPoint.getSignature().getName());  // 方法签名long begin = System.currentTimeMillis();// 执行目标方法Object result = joinPoint.proceed();long end = System.currentTimeMillis();logger.warn("====== 执行结束,耗时{}毫秒 ======", (end - begin));return result;}
}

运行日志效果:

INFO  ServiceLogAspect:44 - ====== 开始执行class com.lzp.service.impl.CategorylServiceImpl.listSixNewItems ======
业务/数据库操作log
WARN  ServiceLogAspect:53 - ====== 执行结束,耗时3毫秒 ======

打印Service运行时间与Aspect相关注解使用相关推荐

  1. (十一)Spring 基础注解(对象创建相关注解、注入相关注解)

    注解编程 目录 注解基础概念 注解的作用 Spring 注解的发展历程 Spring 基础注解(Spring 2.x) 对象创建相关注解 @Component @Repository.@Service ...

  2. 【Spring 基础注解】对象创建相关注解、注入相关注解、注解扫描详解

    Spring 基础注解(2.x) 注解基础概念 注解的作用 Spring 注解的发展历程 对象创建相关注解 @Component @Repository.@Service.@Contoller @Sc ...

  3. Spring bean依赖注入、bean的装配及相关注解

    依赖注入 Spring主要提供以下两种方法用于依赖注入 基于属性Setter方法注入 基于构造方法注入 Setter方法注入 例子: public class Communication {priva ...

  4. spring boot 相关注解

    spring boot是基于spring 开发的,因此,spring boot工程中可以使用spring 的注解.除了spring注解外,spring boot会使用到的注解有: @SpringBoo ...

  5. Spring : 缓存相关注解@EnableCaching、@CacheConfig、@Cacheable、@Caching

    1.美图 2.概述 缓存相关注解 解释 @EnableCaching 开启缓存注解的支持 @CacheConfig 用于统一制定一些配置参数,这样在其他缓存注解里面就不用重复指定 @Cacheable ...

  6. Spring :读取配置文件(.properties、.yam)相关注解

    1.美图 2.概述 读取配置文件相关的注解,就是用来帮助我们获取到配置文件.properties..yam里面信息的. 读取配置文件相关注解 解释 @EnableConfigurationProper ...

  7. redis缓存相关注解

    相关注解介绍 1 @Cacheable 如果缓存中不存在目标值,则将调用目标方法并将返回的值存入缓存:如果存在,则直接返回缓存中的值,不会执行方法体.即使方法体内进行了数据库的更新操作,也不会执行. ...

  8. 详解Spring MVC请求参数类型,解决中文乱码问题,自定义类型转换器,Spring MVC相关注解

    #SpringMVC SpringMVC请求 简单类型 简单类型包括:基本类型,基本类型的包装类型,字符串 编写Controller @RequestMapping("/param" ...

  9. Spring AOP 面向切面编程相关注解

    Aspect Oriented Programming 面向切面编程 在Spring中使用这些面向切面相关的注解可以结合使用aspectJ,aspectJ是专门搞动态代理技术的,所以比较专业. 需要在 ...

最新文章

  1. 【Matlab】解个微分方程
  2. 用SqlBulkCopy批量安插数据时提示来自数据源的 String 类型的给定值不能转换为指定目标列的类型 int...
  3. CM3计算板I/O编程
  4. java学习_5_23
  5. 删除顽固文件夹cygwin的方法,挺折腾的
  6. html video各种控制命令,HTML5 Video(视频)
  7. 鸿蒙手机测试报名,鸿蒙2.0报名下载-鸿蒙2.0申请公测报名入口 v1.0-优盘手机站...
  8. C、C++ 不得宠,微软正开发新的编程语言!
  9. vmware服务器系统配置ip地址,教程 - Vmware ESXi IP地址配置
  10. 《Nature-Inspired Metaheuristic Algorithms》——蝙蝠算法 Bat Algorithm
  11. 吉林大学超星MOOC学习通高级语言程序设计 C++ 实验06 递归程序设计(2021级)
  12. 带你玩转kubernetes-k8s(第37篇:核心组件运行机制-Kubelete)
  13. 无线通信设备安装工程概预算编制_深圳电气安装造价培训-如何计算电气设备安装工程预算定额?...
  14. Ethernet和802.3的区别
  15. matlab2014simulink中的三相晶闸管整流桥怎么找_哈尔滨有源滤波组件HPD2000-100-4L坏了怎么办 - 哈尔滨照明工业...
  16. 美女照相怎么摆pose
  17. 苹果发布会2014发布会简单总结
  18. 微软面试题之数字谜题
  19. 定义一个学生信息结构体,包含姓名,学号,语文成绩、数学成绩,和英语成绩,定义结构体数组存放不同学生的信息,可以在终端录入学生的信息,在基础上添加一个计算平均值和按照平均值排序以及删除指定学号的学生信息
  20. 语音的扩张——共鸣器官

热门文章

  1. 黑苹果是否会成为mac电脑的竞争对手?
  2. left join和left semi join的联系和区别
  3. 最小二乘法线性拟合及其代码实现(C语言)
  4. 微信公众平台开发——群发信息
  5. The method setOnClickListener(View.OnClickListener) in the type View is not applicable for the argu
  6. 如何计算每月还多少房贷
  7. echarts-liquidfill 水滴图/水位图/水球 下载地址
  8. 中国信号发生器行业市场供需与战略研究报告
  9. 如何画出FPN论文中的金字塔结构图
  10. DiscuzX 数据字典 超详细