没有发生使用spring aop在jar文件中描述方法

时间:2015-12-11 16:56:12

标签: java elasticsearch spring-boot aspectj spring-aop

我的要求是分析弹性搜索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文件中吗?如果我将切入点更改为项目中的任何其他方法,它的工作正常。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

Spring AOP仅适用于Spring Beans,即Spring实例化和维护的类。这似乎是一个非Spring核心ElasticSearch类。你需要至少移动一级并找出Spring胶水代码调用此类的内容,重写切入点以指向Spring胶水代码。

但是我甚至不确定它会起作用,因为Spring Data使用它自己的代理魔法,所以我不确定你是否可以将AOP代理应用于那些。最安全的选择是将切入点指向调用ElasticSearch的代码