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