当前位置: 首页 > 知识库问答 >
问题:

如何使方面在aservice.methodB()方法上工作?[副本]

张永嘉
2023-03-14

我定义一个方面如下:

@Component
@Aspect
public class ServiceMethodExecuteTimeAspect {

private Logger logger = LoggerFactory.getLogger(getClass());

@Pointcut("execution(* *.service.*.*(..))")
public void serviceMethod() {

}

@Around("serviceMethod()")
public Object executeTime(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
    Object result;
    MethodSignature signature = (MethodSignature) proceedingJoinPoint.getSignature();
    Method method = signature.getMethod();
    long executeTime;
    long start;
    try {
        start = System.currentTimeMillis();
        result = proceedingJoinPoint.proceed();
        long end = System.currentTimeMillis();
        executeTime = end - start;
        logger.debug("ServiceMethodExecuteTimeAspect class method:{}#{} execute time is:{}", proceedingJoinPoint.getTarget().getClass().getName(), method.getName(), executeTime);
        return result;
    } catch (Throwable throwable) {
        logger.error("ServiceMethodExecuteTimeAspect throw exception", throwable);
        throw throwable;
    }
}
}

我在服务包中有一个服务类,如下所示:

package example.service;
@Service
public class AService{
    public void methodA(){methodB();}
    public void methodB(){}
}
DEBUG o.s.a.f.CglibAopProxy - Unable to apply any optimizations to advised method: public example.AService.methodB();

共有1个答案

冷善
2023-03-14

一种方法可以做到这一点,定义另一个服务,并将方法methodb()移到其中。

 类似资料:
  • 尝试在controller上添加@Validated方法,它起作用了 它应该抛出MethodArgumentNotValidException但不抛出。

  • 问题内容: 按照javadoc的通知,唤醒正在此对象的监视器上等待的单个线程。如果有任何线程在此对象上等待,则选择其中一个唤醒。选择是任意的,并且可以根据实现情况进行选择。线程通过调用其中一个wait方法在对象的监视器上等待。 我想知道如何通过通知实现此行为。我在许多站点上都读到它发出信号,但是信号在这里意味着什么? notify是直接向第一个等待线程发送信号还是向线程调度程序发送信号? 问题答案

  • 问题内容: 我对迭代器的方法有疑问。如果我的代码包含以下内容(大小为4),请执行以下操作: 在第一次迭代时,迭代器开始指向索引为0的元素?还是喜欢“指数-1”? 我问,因为据我所知,该方法返回集合中的下一个元素。 因此,如果在第一次迭代时迭代器在被调用时从索引0开始,它将返回索引1的元素,而我将无法对索引0的元素做任何事情? 问题答案: 可以将其视为两步过程。首先,它获得迭代器中的下一个项目,然后

  • 我正在尝试修改一个插件(Pikaday)并添加我自己的一点点功能。 这个插件是使用原型系统构建的,我在其中添加了我的函数。 我很难理解的是如何实际触发这个方法。单击指定的元素不起作用。 如果有人感兴趣,这里有完整的代码(减去我的加法)。

  • 问题内容: 我很好奇java如何通过使用Object API的hashCode()方法生成哈希值? 问题答案: Java不会生成hashCode(),即此处没有自动发生的情况。但是,根据对象实例的内存地址生成HashCode。大多数类(尤其是如果要在任何API中使用它的类)都应该实现自己的HashCode(并通过契约使用自己的equals方法)。