Spring AOP не работает с зависимостями (Spring Boot)

Я пытаюсь реализовать АОП в своем проекте, в котором несколько клиентов коннектора API добавлен как пом зависимости. Зависимости не могут быть изменены, поэтому я пытаюсь добавить логику АОП в родительский проект.

Пример. Проект А

<dependencies>
    <!------ other dependencies ------->
    <dependency>
       <groupId>x.y</groupId>
       <artifactId>api-client-b</artifactId>
       <version>1.0.0</version>
    </dependency>
    <dependency>
       <groupId>p.q</groupId>
       <artifactId>api-client-c</artifactId>
       <version>1.0.0</version>
    </dependency>
</dependencies>

     

Код AOP хорошо работает при применении к классам проекта A, но когда я пытаюсь добавить его в какой-то класс внутри, скажем, api-client-b или api-client-c, он не работает. Может ли кто-нибудь помочь мне понять, что я делаю не так, а также предложить обходной путь?

Пожалуйста, обрати внимание: Я не могу изменить api-client-b и api-client-c

если вы не можете изменить api-client-b и api-client-c, как вы предполагаете изменить их поведение?

Stultuske 30.03.2021 16:06

Вам нужно будет обернуть эти клиентские классы B и C. Вы не можете ожидать, что они узнают о Spring Boot или ваших аспектах.

duffymo 30.03.2021 16:09

И это должно работать, потому что? Зарегистрированы ли эти классы как beans и используются как beans или они созданы с помощью new? Действительно ли ваш аспект соответствует этим классам (выражениям pointcut). В общем, слишком мало информации, чтобы помочь.

M. Deinum 30.03.2021 16:16
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
36
1

Ответы 1

Если у вас нет исходного кода аспекта или применения АОП к файлам классов или файлам JAR, тогда вы можете выполнить переплетение времени после компиляции или переплетение времени загрузки.

Концепция очень хорошо объяснена в этой статье.

https://www.baeldung.com/aspectj

Другие вопросы по теме