簡體   English   中英

Aspectj是否可以訪問Scala中方法的隱式參數?

[英]Does aspectj have access to implicit parameters on a method in Scala?

我正在使用AspectJ進行一些用戶身份驗證。 將userId作為方法的隱式參數將是非常好的。 但是我不知道AspectJ joinPoint是否可以看到隱式參數。

還有其他人嘗試嗎?

提供服務

class User(val name: String) {
  override def toString = s"$name"
}

class Service {
  def run()(implicit user: User) {
    println(user.name)
  }

隱式參數只是作為類文件中的“正常”參數出現(從javap輸出):

public class app.scala.Service extends java.lang.Object{
    public void run(app.scala.User);
    public app.scala.Service();
}

因此使用“正常” AspectJ切入點,例如:

before(Service s, User user) : 
    call(void Service.run(User)) && target(s) && args(user) {

    System.out.println("Hello from AspectJ (before service run)");
    System.out.println("  "  + user);
}

有效(適用於scalac生成的.class文件)。

從Aspectj的角度來看,隱式參數沒什么特別的。 Scala編譯器將多個參數列表中的參數合並為一個,並將其存儲在.class文件中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM