仅供参考,此问题继续为以下问题命名:使用AspectJ和Scala 时出错
我正在尝试将AspectJ与Scala一起使用,特别是与Akka actor系统一起使用。
我一直在制作这种类型的切入点:
@Around(""execution (* akka.actor.ActorRef.!(..)) " + "&& args(message, sender)", argNames = "(message, sender)")")
def printSample() {
println("receive message ")
}
然而,出现了一个错误:
Invalid pointcut '"execution (* akka.actor.ActorRef.!(..)) " + "&& args(message, sender)", argNames = "(message, sender)")': org.aspectj.weaver.
patterns.ParserException: identifier at position 0
[error] org.aspectj.bridge.AbortException: AspectJ failed
您的切入点可能是一个副本&粘贴错误,你引用了它:
@Around(""execution (* akka.actor.ActorRef.!(..)) " + "&& args(message, sender)", argNames = "(message, sender)")")
如果你修复它以读取
@Around(
"execution (* akka.actor.ActorRef.!(..)) && args(message, sender)",
argNames = "(message, sender)"
)
然后您就有了可能要使用的两个注释参数。但ActorRef.!(..)
和!
看起来仍然很奇怪,你可能是指*
。如果advice方法中的参数名称与args()
中使用的参数名称相同,则也可以完全省略该部分并避免样板:
@Around("execution(* akka.actor.ActorRef.*(..)) && args(message, sender)")
这样就可以了。
一句话:你的问题是关于基本的Java注释和AspectJ的使用,而不是关于Scala或Akka或你认为的任何问题。