我在一个类中有一个方法,它被其他各种方法调用。我已经为这个方法创建了一个切入点,around建议记录了这个方法的所有执行细节,比如当前执行时间、最大执行时间等,或者任何异常。
<bean id="performanceMonitor"
class="org.springframework.aop.interceptor.PerformanceMonitorInterceptor" />
<bean id="perfInterceptor" class="com.aop.PerformanceInterceptor"/>
<aop:config>
<aop:pointcut id="allRestTemplate" expression="execution(* org.springframework.web.client.RestTemplate.*(..))"/>
<aop:advisor pointcut-ref="allRestTemplate" advice-ref="perfInterceptor" order="2"/>
</aop:config>
这是拦截器:
public class PerformanceInterceptor implements MethodInterceptor {
public Object invoke(MethodInvocation method) throws Throwable {
try {
return method.proceed();
} catch (IOException | RestClientException ex){
LOG.error("method " + method.getMethod().getName() + "for call from...??? ");
throw ex;
}
}
}
我想知道哪个方法正在调用切入点方法,以便我可以记录它或根据调用者对执行统计信息进行分组。
如何使用Spring AOP获取呼叫者的姓名?
从AOP的角度概念上讲,没有任何应用程序方法是“调用切入点”。每当切入点与方法执行匹配时,切入点就会被基于切入点的方面框架激活。
至于如何获得调用堆栈,这不是一个AOP问题,而是一个基本的Java问题。只需使用new Throwable()。getStackTrace(),并遍历StackTraceeElement的数组。在Java 9上还有StackWalking API。
问题内容: 我正在研究非常庞大的基于Java Web的应用程序。由于在开发过程中没有完成正确的日志记录,因此我很难设置断点并调试应用程序,因为我不知道执行顺序。在执行一些操作之后,是否有任何机制可以获取正在运行的Java应用程序的完整调用堆栈。 我在网上搜索了很长时间,但无法找到具体的解决方案。如果有东西请给我建议。谢谢 问题答案: 方法1:从命令行使用Jstack实用程序(JDK发行版的一部分)
一些日志记录需要在类的静态方法执行前后完成。我试图使用Spring AOP实现这一点,但它不起作用,对于普通方法来说,它是起作用的。请帮助我理解如何实现这一点,如果可以使用注释来完成,那就太好了。
问题内容: Python:如何在被调用方法中获取调用者的方法名称? 假设我有2种方法: 如果我不想对method1进行任何更改,如何在method2中获取调用者的名称(在本示例中,名称为method1)? 问题答案: inspect.getframeinfo和其他相关功能可以帮助: 该自省旨在帮助调试和开发;建议不要将其用于生产功能。
问题内容: Python:如何在被调用方法中获取调用者的方法名称? 假设我有2种方法: 如果我不想对method1进行任何更改,如何在method2中获取调用方的名称(在本示例中,名称为method1)? 问题答案: 和其他相关功能可以帮助: 该自省旨在帮助调试和开发;建议不要出于生产功能目的而依赖它。
问题内容: 出于诊断目的,有时我需要存储导致给定状态转换(例如授予锁,提交事务等)的调用堆栈,以便以后出现问题时,我可以找出最初触发状态转换的人员。 当前,我知道的唯一检索调用堆栈的方法类似于以下代码片段,我认为这非常丑陋: 有人知道实现此目标的更好方法吗? 问题答案: 我认为您可以通过以下方式获得相同的结果:
我是一名大学生,学习球拍/方案和C作为我的CS学位的入门课程。 我在网上读到,在C语言中使用迭代而不是递归通常是最佳实践,因为递归由于将堆栈帧保存到调用堆栈上而代价高昂。。。 现在,在类似于Scheme的函数式语言中,递归一直在使用。我知道尾部递归在Scheme中是一个巨大的优势,据我所知,它只需要一个堆栈帧(有人能澄清这一点吗?)无论递归有多深。 我的问题是:非尾递归呢?每个函数应用程序是否保存