【问题标题】:AspectJ can't work on Scala function literal?AspectJ 不能在 Scala 函数文字上工作?
【发布时间】:2015-05-03 01:53:46
【问题描述】:

我有以下 scala 类和带注释的 aspectj 类:

package playasjectj

import org.aspectj.lang.annotation.Pointcut
import org.aspectj.lang.annotation.Aspect
import org.aspectj.lang.annotation.Before

class Entity {
    def foo(p:String):String ={
      return p
    }
    def bar(handler:(String,String,Long)=>String):Unit={
        handler("first", "second", 100L)
    }
}

object Entity {
  def main(args:Array[String]){
     val inst = new Entity
     inst.foo("we are the champion")
     val handler = (first:String, second:String, value:Long) => {
          first + second + ":" + value
     }
     inst.bar(handler)
  }
}

@Aspect
class EntityAspect{

    @Pointcut("execution(* foo(String) ) && target(playasjectj.Entity) && args(p)")
    def pointcut_foo(p:String):Unit={}

    @Pointcut("execution(* bar(scala.Function3<String,String,Long,String>)) && target(playasjectj.Entity) && args(handler)")
    def pointcut_bar(handler: (String,String,Long)=>String):Unit={}

    @Before("pointcut_foo(p)")
    def beforeAdvice_foo(p:String):Unit={
        println("before advice foo: "  + p)
    }

    @Before("pointcut_bar(handler)")
    def beforeAdvice_bar(handler:(String,String,Long)=>String):Unit={
        println("before advice bar:")
    }

}

function bar 运行良好,但 function foo 不行。没有任何错误,似乎函数“foo”的执行没有被捕获。

[AppClassLoader@14dad5dc] info AspectJ Weaver 版本 1.8.5 于 2015 年 1 月 29 日星期四 01:03:58 GMT 构建

[AppClassLoader@14dad5dc] 信息注册类加载器 sun.misc.Launcher$AppClassLoader@14dad5dc

[AppClassLoader@14dad5dc] 使用配置的信息 /Users/grant/programming/java/workspace/playasjectj/bin/META-INF/aop.xml

[AppClassLoader@14dad5dc] 信息注册方面 playasjectj.EntityAspect 在建议 foo 之前:我们是冠军

有人知道如何解决这个问题吗?我想这与scala如何将元组转换为java类有关

【问题讨论】:

    标签: scala aspectj function-literal


    【解决方案1】:

    自己解决。问题不是函数文字,而是键入“Long”。如果我在那种情况下使用“java.lang.Long”,那就行得通。对于泛型类型,AspectJ 需要“类型”,而不是原始类型。在 Scala 中,Int、Long 甚至 Boolean 等数值类型值等价于 java 原始类型

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-27
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多