【问题标题】:Scala + AspectJ: if() pointcut expressionsScala + AspectJ:if() 切入点表达式
【发布时间】:2018-02-28 09:20:27
【问题描述】:

我在我的 Scala 项目中使用带有 sbt-aspectj 的 AspectJ 库。 我正在尝试用if() 表达式写@Pointcut

@Aspect
object PerformanceTracer extends Logger {

  @Pointcut("@annotation(PerformanceTracing) && execution(* *(..)) && if()")
  def tracePerfPc(jp: ProceedingJoinPoint): Boolean = {
    // some logic
  }

  @Around("tracePerfPc(jp)")
  def tracePerformance(jp: ProceedingJoinPoint): Object = {
    val start = System.currentTimeMillis
    log.debug("{}: start proceeding", jp.toShortString)
    val res = jp.proceed
    val duration = System.currentTimeMillis - start
    log.info("[{} ms] {}: end proceeding. Duration: {} ms.", duration, jp.toShortString, duration)
    res
  }
}

但我有以下例外:

[warn] warning at <Unknown>::0 Found @Pointcut on a method not returning 'void' or not 'public static boolean'
[error] error at <Unknown>::0 Cannot read debug info for @Aspect to handle formal binding in pointcuts (please compile with 'javac -g' or '<javac debug='true'.../>' in Ant)
[error] org.aspectj.bridge.AbortException: AspectJ failed
[error]         at com.lightbend.sbt.SbtAspectj$Ajc$.runAjcMain(SbtAspectj.scala:212)
[error]         at com.lightbend.sbt.SbtAspectj$Ajc$.runAjc(SbtAspectj.scala:124)
[error]         at 
...

following AspectJ tutorial 说:

因此,注释样式可以使用 if() 切入点 仅在 @Pointcut 表达式中。 if() 不能包含任何 身体。带注释的 @Pointcut 方法必须是 public 的形式 静态布尔值,可以像往常一样使用正式的绑定

是否可以在 Scala 方法的 @Pointcut 中使用 if() 表达式?

【问题讨论】:

    标签: scala aop aspectj sbt-aspectj


    【解决方案1】:

    请注意,tracePerfPc() 的方法签名是

    def tracePerfPc(jp: ProceedingJoinPoint): Boolean
    

    或更完整

    def tracePerfPc(jp: ProceedingJoinPoint): scala.Boolean
    

    scala 中的类型Boolean(或scala.Boolean)与Java 的boolean 不同,后者是原始类型,没有对象。

    因此,您不能在 AspectJ 中将 if() 与返回值一起使用,因为原始类型 boolean 在本机 scala 中不存在。

    【讨论】:

      猜你喜欢
      • 2015-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 2022-08-06
      • 2012-12-31
      相关资源
      最近更新 更多