Я недавно начал использовать AspectJ LTW .Я использую Eclipse с AJDT .Я в основном использую опцию «outjar» для создания моей «библиотеки AspectJ (файл .jar)» с скомпилированными файлами .aj.
Следующим шагом является использование этого jar-файла в «нормальном» Java-проекте Eclipse, который просто отлично работает, если у меня есть библиотека aspectjweaver.jar по пути javaagent:
-javaagent:lib/aspectjweaver.jar
Мой следующийцель состоит в том, чтобы использовать второй файл aop.xml в этом «обычном» Java-проекте.Даже это хорошо работает, если файл META-INF/aop.xml
находится в пути поиска загрузчика классов.Теперь я обнаружил это:
http://www.eclipse.org/aspectj/doc/released/README-1612.html
(прокрутите вниз до «Более гибкое соединение точек / кода в aop.xml»)
Следующая XML-спецификацияработает без проблем:
<aspectj>
<aspects>
<concrete-aspect name="MyAspect">
<before pointcut="set(* *.myStringField) AND args(message)"
invokeClass="my.package.SomeRegularJavaClass" invokeMethod="someMethod(JoinPoint tjp, java.lang.String message)" />
</concrete-aspect>
</aspects>
</aspectj>
Но что меня на самом деле интересует, так это "передать" мой собственный аргумент / переменную / сообщение методу someMethod
.Что-то вроде:
<aspectj>
<aspects>
<concrete-aspect name="MyAspect">
<before pointcut="set(* *.myStringField) AND args(message)"
invokeClass="my.package.SomeRegularJavaClass" invokeMethod="someMethod(JoinPoint tjp, java.lang.String message, java.lang.String "customMessage")" />
</concrete-aspect>
</aspects>
</aspectj>
Так есть ли способ передать строку (например) в метод someMethod
?Или есть другие варианты?