2014-06-10 2 views
0

Я пытаюсь перехватить параметр конструктора в Скале с 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

ответ

0

Я думаю, что я говорил вам о списке рассылки AspectJ: Вы должны связать аргументы, которые вы хотите изменить с помощью args(). Сделайте то, что я сказал вам в ML, и перестать задавать один и тот же вопрос во всем мире. Это уже второй раз. Просто игнорируя мой совет и снова спрашивая где-то в другом месте, вы не решаете свою проблему и просто создаете дополнительную работу и дополнительные проблемы для тех, кто хочет вам помочь.

Смежные вопросы