springboot 利用 切面计算方法的时间,为什么有的方法没有执行这个切面

利用注解的方式编写 了一个计算方法执行时间的切面,我把注解放在了controller层的方法上和一个自定义的方法上,但是发现自定义方法没有执行这个切面。
第一个方法为一个controller,第二个方法为这个controller方法里边调用的另一个方法
最后的日志只打印了 第一个方法的执行时间,

img

img

img

注解

package com.bjidit.eccms.common.aop;

import java.lang.annotation.*;

/**
 * @author Jgybz
 * @date 2022/4/28/0028 15:54
 * @des
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MethodRunTime {

}


切面

package com.bjidit.eccms.common.aop;

import com.bjidit.eccms.common.exception.BusinessException;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

/**
 * @author Jgybz
 * @date 2022/4/28/0028 15:56
 * @des
 */
@Aspect
@Component
public class MethodRunTimeAspect {
    private final Logger log = LoggerFactory.getLogger(this.getClass());

    /**
     * 切点 扫描整个mapper
     */
    @Pointcut("@annotation(com.bjidit.eccms.common.aop.MethodRunTime)")
    public void runTime() {
        // 定义
    }

    @Before("runTime()")
    public void before(JoinPoint joinPoint) {
        String name = joinPoint.getSignature().getName();
    }

    @After("runTime()")
    public void after(JoinPoint joinPoint) {
        String name = joinPoint.getSignature().getName();
    }

    @AfterReturning(value = "runTime()", returning = "result")
    public void afterReturning(JoinPoint joinPoint, Object result) {
        String name = joinPoint.getSignature().getName();
    }

    @Around("runTime()")
    public Object around(ProceedingJoinPoint pjp) {

        try {
            String name = pjp.getSignature().getName();
            Class declaringType = pjp.getSignature().getDeclaringType();
            String declaringTypeName = pjp.getSignature().getDeclaringTypeName();
            int modifiers = pjp.getSignature().getModifiers();
            long startTime = System.currentTimeMillis();
            Object result = pjp.proceed();
            long endTime = System.currentTimeMillis();
            long time = endTime - startTime;
            log.info("Method name [{}] ----->执行时间:{}", declaringTypeName + "." + name, time);
            return result;
        } catch (Throwable th) {
            th.printStackTrace();
            throw new BusinessException(500, th.getMessage());
        }
    }
}


第二个方法所在类添加@Component注解,交给spring管理,使用第二个方法的时候,在第一个方法的所在类注入第二个方法所在类

img

img