@AspectJ。 scala(可能是java)lambdas的切入点

scala lambdas有可能有poitcut吗? 如果我没有弄错scala lambdas现在编译方式与java lambdas相同,所以我认为我的问题也适用于java lambdas,但我不确定。

这是代码。 基本上我想建议Runnable实例。 如果我使用类或匿名类,它可以很好地工作,但是如果我使用lambdas则它不起作用。

@Around("execution(* (com.test..* && java.lang.Runnable+).run())") def runnableAspect(pjp: ProceedingJoinPoint): Any = { println("Runnable caught") pjp.proceed() } 

这是测试代码:

 package com.test class Greet { def hello(): Unit = { println("-----start--------") run(new Runnable { override def run(): Unit = println("anonymous class") }) println("------------------") run(() => println("lambda")) println("-----end--------") } private def run(r: Runnable) = r.run() } 

输出是:

 -----start-------- Runnable caught anonymous class ------------------ lambda -----end-------- 

有可能吗? 如果是的话,我做错了什么?

基于这个答案。

对于Java

 @Around("execution(void com.test..lambda*(..)) || execution(* (com.test..* && java.lang.Runnable+).run())") 

对于斯卡拉

 @Around("execution(void com.test..$anonfun*(..)) || execution(* (com.test..* && java.lang.Runnable+).run())")