【问题标题】:@AspectJ. Pointcut for scala (and probably java) lambdas@AspectJ。 scala(可能还有 java)lambdas 的切入点
【发布时间】:2017-08-25 14:28:08
【问题描述】:

是否可以为 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 scala aspectj


    【解决方案1】:

    基于this 的回答。

    对于 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())")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多