我的要求是分析弹性搜索java api get方法来查找执行时间。我已经写了一个Spring AOP方面来做这个
func downloadImageFromURL () {
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession (configuration: config)
let task = session.dataTaskWithURL(self.markerURL!) { (data, response, error) -> Void in
dispatch_async(dispatch_get_main_queue(), { () -> Void in
if ((error != nil)) {
self.addMarkerToMap (data)
} else {
print(error)
}
})
}
}
@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
,由maven加载。我正在使用带有maven的弹簧靴。但看起来这方面根本没有被执行。是因为这个elasticsearch.jar
在另一个JAR文件中吗?如果我将切入点更改为项目中的任何其他方法,它的工作正常。我该如何解决这个问题?
答案 0 :(得分:0)
Spring AOP仅适用于Spring Beans,即Spring实例化和维护的类。这似乎是一个非Spring核心ElasticSearch类。你需要至少移动一级并找出Spring胶水代码调用此类的内容,重写切入点以指向Spring胶水代码。
但是我甚至不确定它会起作用,因为Spring Data使用它自己的代理魔法,所以我不确定你是否可以将AOP代理应用于那些。最安全的选择是将切入点指向调用ElasticSearch的代码