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

时间:2017-08-25 14:28:08

标签: java scala aspectj

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--------

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

1 个答案:

答案 0 :(得分:1)

基于this回答。

For Java

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

对于Scala

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