使用 spring aop 分析 jar 文件中的方法未发生
Profile a method in the jar file using spring aop is not happening
我的要求是分析弹性搜索 java api get 方法来查找执行 timings.I 已经编写了 Spring AOP 方面来执行此操作
@Aspect
@Component
public class PerformanceAspect {
private final Logger LOGGER = LoggerFactory
.getLogger(PerformanceAspect.class);
@Pointcut("execution(* org.elasticsearch.action..ActionRequestBuilder.get(..))")
public void getESMethod() {}
@Around("getESMethod()")
public void profile(ProceedingJoinPoint pjp) {
long start = System.currentTimeMillis();
LOGGER.info("Calling the get method..");
try {
pjp.proceed();
LOGGER.info("Method execution completed");
long elapsedTime = System.currentTimeMillis() - start;
LOGGER.info("Method execution time "+elapsedTime);
} catch (Throwable e) {
e.printStackTrace();
}
}
}
ActionRequestBuilder
在 elasticsearch.jar
中,由 maven 加载。我在 Maven 中使用 spring 启动。但看起来这方面根本没有得到执行。是因为这个 ActionRequestBuilder
在另一个 JAR 文件中吗?如果我将切入点更改为项目中的任何其他方法,它工作正常。我该如何解决这个问题?
Spring AOP 仅适用于 Spring Beans,即 classes 由 Spring 实例化和维护。这似乎是一个非 spring 核心 ElasticSearch class。您需要至少向上移动一级并找出 Spring 胶水代码调用此 class 的内容,重写切入点以指向 Spring 胶水代码。
但我什至不确定这是否有效,因为 Spring 数据使用它自己的代理魔法,所以我不确定您是否可以将 AOP 代理应用于这些。最安全的做法是将切入点指向调用 ElasticSearch
的代码
我的要求是分析弹性搜索 java api get 方法来查找执行 timings.I 已经编写了 Spring AOP 方面来执行此操作
@Aspect
@Component
public class PerformanceAspect {
private final Logger LOGGER = LoggerFactory
.getLogger(PerformanceAspect.class);
@Pointcut("execution(* org.elasticsearch.action..ActionRequestBuilder.get(..))")
public void getESMethod() {}
@Around("getESMethod()")
public void profile(ProceedingJoinPoint pjp) {
long start = System.currentTimeMillis();
LOGGER.info("Calling the get method..");
try {
pjp.proceed();
LOGGER.info("Method execution completed");
long elapsedTime = System.currentTimeMillis() - start;
LOGGER.info("Method execution time "+elapsedTime);
} catch (Throwable e) {
e.printStackTrace();
}
}
}
ActionRequestBuilder
在 elasticsearch.jar
中,由 maven 加载。我在 Maven 中使用 spring 启动。但看起来这方面根本没有得到执行。是因为这个 ActionRequestBuilder
在另一个 JAR 文件中吗?如果我将切入点更改为项目中的任何其他方法,它工作正常。我该如何解决这个问题?
Spring AOP 仅适用于 Spring Beans,即 classes 由 Spring 实例化和维护。这似乎是一个非 spring 核心 ElasticSearch class。您需要至少向上移动一级并找出 Spring 胶水代码调用此 class 的内容,重写切入点以指向 Spring 胶水代码。
但我什至不确定这是否有效,因为 Spring 数据使用它自己的代理魔法,所以我不确定您是否可以将 AOP 代理应用于这些。最安全的做法是将切入点指向调用 ElasticSearch
的代码