【问题标题】:AspectJ: intercept constructor in scalaAspectJ:scala中的拦截构造函数
【发布时间】:2014-06-10 16:34:52
【问题描述】:

我正在尝试使用 aspectj 拦截 scala 中的构造函数参数:

class ConstructorTest extends FlatSpecLike with Matchers {

  "MyObjectAspect" should "work" in {

    val t = new MyObject("leon")

    val result = t.talk()

    result should be("LEON")

  }
}


class MyObject(text: String) {

  def talk(): String = {

    println(text)

    text

  }
}


@Aspect

class MyObjectAspect {

  @Around(value = "execution (com.leon.aop.MyObject.new(..))")

  def constructCP(jp: ProceedingJoinPoint): AnyRef = {

    try {

      println("Start...")

      val args = jp.getArgs

      args(0) = args(0).toString.toUpperCase

      jp.proceed(args)

    } finally {

      println("End...")

    }

  }

}

好像不行。

但是,一个非常相似的 java 版本也可以工作:

public class AopTest {

    @Test
    public void test(){

        MyJob t = new MyJob("leon");

        String result = t.talk();

        System.out.println(result);

        Assert.assertEquals(result, "LEON");

    }

}


public class MyJob {

    private String text;

    public MyJob(String value){
        text = value;
    }

    public String talk(){
        System.out.println(text);
        return text;
    }
}

@Aspect

public class MyJobAspect {

    @Around(value = "execution (com.leon.aop.MyJob.new(..))")

    public Object constructCP(ProceedingJoinPoint jp) throws Throwable {
        try {

            System.out.println("Start..");

            Object[] args = jp.getArgs();

            args[0] = args[0].toString().toUpperCase();

            return jp.proceed(args);

        } finally {

            System.out.println("End...");
        }

    }

}

有人可以帮忙吗?

提前致谢!

里昂

【问题讨论】:

    标签: scala constructor aspectj


    【解决方案1】:

    我想我之前在 AspectJ 邮件列表中告诉过你:你需要通过 args() 绑定要修改的参数。按照我在 ML 上告诉你的去做,不要到处问同样的问题。这已经是第二次了。忽略我的建议并在其他地方再次询问并不能解决您的问题,只会给愿意帮助您的人带来额外的工作和麻烦。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多