[英]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.