AOP基础&&进阶

Spring Aop快速入门:统计各个业务层方法执行耗时

  • 导入依赖:在pom.xml中导入AOP的依赖
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

-编写AOP程序:针对特定方法根据业务需要进行编程

@Slf4j
@Component //加入容器管理
@Aspect   //Aop类
public class TimeAspect {
@Around("execution(* com.itheima.service.*.*(..))")  //com.itheima.service 包名. * 类名.* 方法名. (.. 所有参数)

public Object recordTime(ProceedingJoinPoint joinPoint) throws Throwable {
//记录开始时间
long begin =System.currentTimeMillis();
//调用原始方法运行
object result = joinPoint.Proceed();
//记录结束时间,计算方法执行耗时
long end = System.currentTimeMillis();
rteurn result;
}
}

@Aspect 定义切面
@Pointcut定义命名的切点
切入点表达式:execution(* cn.tedu.store.service.impl..(…))&& args()
第一个
:返回任意类型
第二个*:类
第三个*:类中的方法
第四个(…):方法中接收任意类型的参数
第五个*:指定参数
execution([方法的访问控制修饰符] 方法的返回值 包名.类名/接口名.方法名(参数))
注意:方法的访问控制修饰符可以省略,写方法名的时候要把包名和类名全部带上。
@Before定义方法执行前通知 (应用场景:校验)
@After定义方法执行后通知 (应用场景:清理现场,释放资源)
@AfterReturning定义方法执行结果返回后通知 (应用场景:常规数据处理)
@AfterThrowing定义方法执行中抛出异常后通知 (应用场景:异常处理)
@Around 可以在目标方法的前后执行 通知 (应用场景:十分强大,可以做任何事情)

你可能感兴趣的:(spring,boot,java)