Использование Aspectj для загрузки времени для регистрации моего источника (включая тестирование) без регистрации внешних библиотек - PullRequest
0 голосов
/ 22 февраля 2020

Я использую AspectJ для регистрации только при выполнении тестов, поэтому я использую время загрузки. Я упаковываю Interceptor в файл jar для использования с другим проектом Maven. Но с приведенным ниже конфигом aspectjweaver будет переплетать методы внешних библиотек. Я хочу, чтобы он только создавал мой исходный код (включая тест) без указания c config, например <include within="hello.*"/>, для generi c, использующего аналогичные зависимости.

Извините, мой Engli sh довольно плохой. Большое спасибо !!!

В aop. xml этого jar-файла ему нравится

<aspectj>
<aspects>
    <aspect name="log.Interceptor"/>
    <weaver options="-verbose -showWeaveInfo">
        <include within="*"/>
    </weaver>
</aspects>
</aspectj>

// Interceptor

pointcut traceMethods() : (execution(* *(..)) && !cflow(within(Interceptor)) && !within(*Test) && !within(Test*) && !within(*Tests) && !within(*TestCase));
before(): traceMethods(){
    Method method = ((MethodSignature) thisJoinPointStaticPart.getSignature()).getMethod();
    logDebug(method, LogPattern.METHOD_START);
}
after(): traceMethods(){
    Method method = ((MethodSignature) thisJoinPointStaticPart.getSignature()).getMethod();
    logDebug(method, LogPattern.METHOD_FINISH);
}` 

1 Ответ

0 голосов
/ 23 февраля 2020

Ну, вы не можете съесть торт и хранить его одновременно. Таким образом, либо ваше решение является обобщенным c с точечными нацелениями на весь мир, либо оно задается c с помощью включений и / или исключений.

  • То, что вы можете попробовать, - это использовать дополнительные META-INF/aop.xml локально при сборке или развертывании проектов с использованием вашей общей библиотеки c и укажите там вход / исключение Насколько я помню, AspectJ найдет все эти файлы в пути к классам и объединит найденные там настройки.

  • В качестве альтернативы, вы можете определить абстрактный pointcut и попросить своих пользователей сделать его конкретным в файл aop.xml в их проекте.

Оба предложенных решения должны работать, но они требуют от пользователей вашей библиотеки базового c понимания AspectJ или хотя бы синтаксиса pointcut. Либо вы делаете это и документируете свою библиотеку соответственно с образцами pointcuts или целыми образцами конфигурационных файлов AOP, либо вам нужно быть более точным c в ваших собственных pointcut и / или in / exclude. Волшебного c решения не существует, ткач AspectJ не может угадать, что вы хотите соткать, а что нет.

...