SpringAop的一些实用知识点

Joinpoint

  • Signature getSignature():获取封装了署名信息的对象,在该对象中可以获取到目标方法名,所属类的Class等信息
    * joinPoint.getSignature().getName()获取到方法名信息
    * joinPoint.getSignature().getDeclaringType() 获取到类.所调用的方法中的 类,即调用方法的类,之后再考虑使用类加载器反射来完成需要的

  • Object[] getArgs();获取传入目标方法的参数对象

  • Object getTarget();获取被代理的对象(对象的声明类型)

  • Object getThis();获取代理对象(对象的实例类型)

Proceedingjoinpoint

  • 只能用在around通知里
  • Object proceed() throws Throwable:执行目标方法
  • Object proceed(Object[] var1) throws Throwable:传入参数执行目标方法

@PointCut注解

  • 就俩个参数 value,argNames
  • @Before @AfterReturning @Around里面的都有value,argNames参数

简单的实战,通过切面统计方法执行时间

@Around("@annotation(countTime)")  
  public Object running (ProceedingJoinPoint pjp, CountTime countTime) throws Throwable {
      long beginTime = System.currentTimeMillis(); 
      Object obj = pjp.proceed(); //执行目标方法
      String methodName = pjp.getSignature().getName();   //方法名字
      String className = pjp.getSignature().getDeclaringTypeName(); //类的名字
      long endTime = System.currentTimeMillis();
      log.info(className + "中->" + methodName + "方法共计耗时:{}", (endTime - beginTime) + " ms");
      return obj;
  }

CountTime注解如下

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface CountTime {
}
posted @   天道酬勤312  阅读(131)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示