У меня есть пользовательский Around, реализованный в соответствии с пользовательской аннотацией. Я хочу, чтобы пользовательский интерфейс выполнял WITHIN в внешнем @Transactional. К сожалению, это не работает. (AOP работает. Я вижу стеки, которые показывают его).Custom Spring AOP Around + @Transactional
Трассировка стека показывает мое выполнение AOP перед (регистратором), сеансом MyBatis, начинающим транзакцию, MyBatis, закрывающим транзакции, весной, закрывающей транзакцию, а затем завершением моей AOP.
Я думал, что это будет иметь приспособление для АОП. Я установил значение, возвращаемое в 1. Я использовал. Это не сработало. Я думаю, это потому, что я неправильно понял, как заказы Весны.
Advice заказа
Что происходит, когда несколько советов все хотят работать на же присоединиться к точке? Spring AOP следует тем же правилам приоритета, что и AspectJ, чтобы определить порядок выполнения рекомендаций. Самый старший совет приоритетов запускается сначала «по пути в» (поэтому дается два куска перед советом, первый с наивысшим приоритетом запускается первым). «На выходе выход из точки соединения, совет с наивысшим приоритетом запускается последним (так что дано два куска после совета, тот, который имеет наивысший приоритет , будет работать вторым).
Если два аргумента, определенные в разных аспектах, оба должны иметь значение , выполняются в одной и той же точке соединения, если вы не указали иначе, то порядок выполнения не определен. Вы можете контролировать порядок выполнения на с указанием приоритета. Это делается обычным способом Spring либо , реализующим интерфейс org.springframework.core.Ordered в классе аспектного вида или аннотируя его аннотацией заказа. Учитывая два аспекта , аспект, возвращающий более низкое значение из Ordered.getValue() (или значение аннотации), имеет более высокий приоритет.
Когда две частям рекомендаций, определенные в том же аспекте, как нужно запускать в том же точке соединения, порядок не определен (так как нет способа получения заказа декларации через отражения для JAVAC скомпилированных классов) , Подумайте о сворачивании таких методов консультаций в один метод консультаций на каждую точку соединения в каждом классе классов или рефакторинг советов в отдельные классы аспектов - которые можно заказать на уровне аспект.
Так что я взял атрибут заказа. Это должно заставить @Transactional возвращать Integer.MIN_VALUE. Поэтому, если бы я понял вышеприведенную цитату, то должен был работать последним. Когда я перераспределяюсь, он все еще выполняется назад. Мой AOP, Spring TX, MyBatis, Закрыть MyBatis, Закрыть SPring Tx, Закрыть мой AOP.
Что я делаю неправильно?