Режим по умолчанию: ПРОКСИ . Когда установлен режим рекомендации ASPECTJ , все бины вводятся в нужном месте. Проверьте текущие документы Spring по теме .
Атрибут mode()
контролирует, как применяется совет: если режим AdviceMode.PROXY
(по умолчанию), то другие атрибутыконтролировать поведение прокси. Обратите внимание, что режим прокси позволяет перехватывать звонки только через прокси;локальные вызовы внутри одного и того же класса не могут быть перехвачены таким образом.
Обратите внимание, что если для mode()
установлено значение AdviceMode.ASPECTJ
, то значение атрибута proxyTargetClass()
будет игнорироваться. Также обратите внимание, что в этом случае JAR-модуль аспекта пружины должен присутствовать в пути к классам, при этом во время компиляции или во время загрузки применяется аспект к затронутым классам. В таком сценарии нет посредника;местные звонки будут также перехватываться.
Примерно так:
Все еще, @Транзакционные методы терпят неудачу. Из-за « TransactionRequiredException », поэтому ASPECTJ не решает проблему на уровне персистентности, только предоставляет внедрение бинов (возможно, не создан менеджер транзакций платформы). Что делать дальше?
См. Исключение транзакции:
!!! Решение:
При работе с транзакциями область должна совместно использоваться в цепочке компонентов: @Service (также, метод вызывающего абонента) <- @ Repository (также, метод транзакций), контекст @Service (класс, метод) должен быть помечен как @Transactional. Применяется к аннотированным методам или классам в стеке вызовов, который заканчивается транзакционной операцией (<em> восходящий подход).
Последовательность аннотаций:
- @ EnableTransactionManagement (в классах @Configuration или в @SpringBootApplication -autoconfiguration -)
- @ Transactional с комментариямиметод / классы в цепочке внедрения бобов ( снизу вверх : постоянный метод / класс, затем слои @ Service / @ Component)
- @ Autowired аннотация на бинах-кандидатах ( экземпляр службы в классе @Controller, экземпляр репозитория в классе @Service)
Примечание: SpringAOP не создает свойства proxy из функций на основе функциональных интерфейсов, поэтому рекомендуется использовать только экземпляры объектов, использующие методы инкапсуляции логики постоянства.
например,
Function<T, R> function
BiFunction<T1,T2,R> function
Supplier<T> supplier
...