@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())")