2010-11-18 3 views
3

Итак, я начал изучать использование AspectJ для обработки событий обработки при изменении состояния объекта в моем домене.Новичок, работающий с AspectJ: не может получить аспект под названием

Фактически, я хотел бы написать совет, который обертывает все методы setter в моем домене. Когда вызывается совет, он проверяет начальное значение устанавливаемого поля, запускает сеттер, а затем проверяет значение после выполнения сеттера. Если значение изменяется, оно вызывает событие для прослушивателя событий, информируя об этом изменении.

Я использовал учебник, найденный здесь: http://www.andrewewhite.net/wordpress/2010/03/17/aspectj-annotation-tutorial/, но я не могу получить какие-либо советы. Обратите внимание, что я использую только метод LTW для плетения моего совета, я не пишу совет, используя язык AspectJ и предварительно компилирую его.

Мой aop.xml (в META-INF для моего тестового набора) выглядит следующим образом:

<aspectj> 
    <aspects> 
     <aspect name="domain.aop.TestAspect"/> 
    </aspects> 
</aspectj> 

Аспект класс, который я создал, выглядит так:

package domain.aop; 

import org.aspectj.lang.JoinPoint; 
import org.aspectj.lang.annotation.Aspect; 
import org.aspectj.lang.annotation.Before; 

@Aspect 
public class TestAspect 
{ 
    @Around("call(* domain.*.set*(..))") 
    public void aroundSetMethods (JoinPoint jp) 
    { 
     System.out.println ("aroundSetMethod called"); 
    } 
} 

Когда Я запускаю свой тестовый пример, я вижу (установив точку останова), что метод (domain.Error.setTask()) вызывается. Я считаю, что это должно вызвать мои советы, но я никогда не вникаю в метод консультаций.

Любые указания на то, что я делаю неправильно здесь?

Благодаря

ответ

3

Вы должны также включать в себя какие классы вы хотите сплести.

Попробуйте заменить файл aop.xml с этим:

<!DOCTYPE aspectj PUBLIC 
     "-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd"> 
<aspectj> 
    <weaver> 
     <!-- only weave classes in this package --> 
     <include within="domain.*" /> 
    </weaver> 
    <aspects> 
     <!-- use only this aspect for weaving --> 
     <aspect name="domain.aop.TestAspect"/> 
    </aspects> 
</aspectj> 

Если вы настроили время выполнения сервера или Java агент правильно, вы можете также увидеть процесс ткачества в журнале.

Надеюсь, это поможет!

+1

Это все. У меня создалось впечатление, что аннотации @Around достаточно, чтобы заставить ткача определить, какие классы должны быть инструментами. По-видимому, было немного больше настроек. Благодаря... – Steve

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