统计业务方法耗时
检测项目所有的业务层方法的耗时(开始执行时间和结束执行之差),在不改变项目主体流程代码的前提条件完成此功能。
AOP
面向切面编程。它并不是Spring框架的特性,Spring很好的支持AOP编程。
如果我们相对业务某一些方法同时添加相同的功能需求,并且在不改变原有的业务功能逻辑的基础上进行完成,可以使用AOP的切面编程进行开发。
首先定义一个类,将这个类作为切面类。
在这个类中定义切面方法(5类)。
将这个切面方法的业务逻辑要执行的代码进行编写和设计。
通过连接点来连接目标方法,就是用粗粒度表达式和细粒度表达式进行连接。
切面方法
1.切面方法修饰符必须是public。
2.切面方法的返回值可以是void和Object。如果这个方法被Around注解修饰词方法必须声明为Object类型,反之随意。
3.切面方法的方法名称可以自定义。
4.切面方法可以接受参数,参数是ProceedingJoinPoint接口类型的参数。但是@Around所修饰方法必须要传递这个参数,其他随
统计业务方法时长功能
1.AOP不是Spring的内部封装的技术,所以使用要进行导包操作。
<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjtools</artifactId> </dependency>
2.定义一个切面类。
aop | TimerAspect
package com.cy.store.aop; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; @Component//将当前类的对象创建使用维护交由Spring容器维护 @Aspect//将此类标记为切面类 public class TimerAspect { }
3.定义切面方法,使用环绕通知的方式进行编写。ProceedingJoinPoint接口表示连接点,目标方法的对象。
public Object around(ProceedingJoinPoint pjp) throws Throwable { // 先记录起始时间 long start = System.currentTimeMillis(); // 执行连接点方法,即切面所在位置对应的方法。本项目中表示执行注册或执行登录等 Object result = pjp.proceed();//调用目标方法 // 后记录结束时间 long end = System.currentTimeMillis(); // 计算耗时 System.err.println("耗时:" + (end - start) + "ms."); // 返回连接点方法的返回值 return result; }
4.将当前的环绕通知映射到某个切面上。
@Around("execution(* com.cy.store.service.impl.*.*(..))")
5.启动项目,随机去访问任意功能模块。
READ–统计业务方法耗时