Я пытаюсь перехватить параметр конструктора в Скале с AspectJ:AspectJ: перехватывать конструктор в Скале
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...");
}
}
}
Любой человек может помочь?
Заранее благодарен!
Leon