аспект для внутреннего вызова метода - PullRequest
3 голосов
/ 29 апреля 2011

У меня есть требование, когда мне нужно разместить аспект вокруг внутреннего вызова метода, под внутренним я подразумеваю

class Person{ 
        public void outerMethod()
          {
            internalMethod() 
          } 
          // Need an aspect here !!
          public void internalMethod() 
          {
           }
}

Я знаю, что это невозможно при использовании обычной Spring AOP, делает нативный аспектпредоставить средство для этого?и могу ли я иметь указатели для того же

Ответы [ 3 ]

2 голосов
/ 29 апреля 2011

Конечно:

// match the call in outerMethod
pointcut callInnerMethod() : call(* Person.internalMethod(..));

Или

// match innerMethod itself
pointcut executeInnerMethod() : execution(* Person.internalMethod(..));

Вы можете комбинировать любой из них с before, after или around советами:

void before() : callInnerMethod() /* or executeInnerMethod() */ {
    // do something here
}

void around() : callInnerMethod() /* or executeInnerMethod() */{
    // do something here
    proceed();
    // do something else here
}

void after() returning() : callInnerMethod() /* or executeInnerMethod() */{
    // do something here
}

Обратите внимание, что это традиционный аспектj-синтаксис, который вы используете в .aj файлах.Вы также можете использовать все эти конструкции с разным синтаксисом в синтаксисе @AspectJ .java.

Пожалуйста, обратитесь к краткому справочнику AspectJ или прочитайте AspectJ в действии

2 голосов
/ 29 апреля 2011

Я просто добавлю ответ на свой вопрос.

Самое главное, этого нельзя достичь с помощью весны,

Это может быть достигнуто аспектом J, когда я попробовал ткачество времени загрузки аспекта, казалось, что оно не обеспечивало решения. (Это не полностью исследовано) ... Я обнаружил, что он помещен как аспект вокруг объекта ... поэтому все вызовы, сделанные через объект, вызывали аспект, однако внутренние вызовы не вызывали аспект

Это может решить только время компиляции.

здесь задают тот же вопрос

Спасибо Sudarshan

0 голосов
/ 29 апреля 2011

Ссылка на эту документацию и использование execution или call pointcuts и around рекомендацииНасколько вы описали свою задачу, они идеально соответствуют вашим потребностям.

...