2010-11-11 2 views

ответ

28

Существует огромная разница между прокси и байтовыми кодами. Прокси могут только перехватывать, если вызов происходит из «космического пространства», но не если вызов происходит из самого объекта (this.transactionalMethod())

Это означает, что если у вас есть класс с двумя методами, T и B . Метод T имеет аннотацию транзакции, а метод B вызывает T на “this.T() ", тогда прокси никогда не вызывается (для T), поэтому в этом случае обработки транзакций нет!

Если вы используете AspectJ, код обработки транзакций является небрежным в байтовом коде T, и он будет выполнен независимо от того, вызван ли вызов из самого объекта или из другого объекта.

+0

Большое вам спасибо за объяснение с ясными и простыми словами. –

6

The docs говорит:

режима по умолчанию «проксите» процессы аннотированных бобов быть проксирование с использованием фреймворки АОПА в Spring (следующий прокси семантики, как описано выше, применяя к вызовам методам поступают только через прокси-сервер). Альтернативный режим «aspectj» вместо этого перетаскивает затронутые классы с помощью аспекта транзакции Spring AspectJ, изменяя код байта целевого класса для применения к любому вызову метода. Для ткачества AspectJ необходимо использовать spring-aspects.jar в пути к классам, а также во время переплета во времени (или во время компиляции). (См. Раздел 7.8.4.5 «Конфигурация пружины» для получения подробной информации о том, как настраивать время загрузки.)

Не имеет значения (с точки зрения разработчика), какой режим будет использоваться.

+0

Ох спасибо. по какой-то причине я не мог найти эту информацию. –

Смежные вопросы