Альтернатива конфигурации Spring @Transactional

Там какая-либо основанная на конфигурации альтернатива к @Transactional аннотации в Spring?

Я хочу сохранить свои классы Java максимально лишенными Spring, т.е. максимально отделенными от любой платформы.

7
задан simon_d 23 June 2010 в 07:30
поделиться

2 ответа

Да, используя aop:config и tx:advice. For example:

<aop:config>
    <aop:pointcut id="serviceMethods"
        expression="execution(* com.package.service..*.*(..))" />

    <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods" />
</aop:config>

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="*" propagation="REQUIRED" />
    </tx:attributes>
</tx:advice>
8
ответ дан 6 December 2019 в 23:00
поделиться

Аннотация - лучший выбор для пометки того, что метод должен выполняться в транзакции. Это рекомендуется как для Spring, так и для EJB 3.

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

Поскольку поддержка транзакций на основе аннотаций является предпочтительным выбором для большинства разработчиков, а вам не нравится использовать аннотацию Spring @Transactional, я порекомендую вам использовать пользовательскую аннотацию.

Тогда у вас есть два варианта:

  • Пусть ваша пользовательская аннотация расширяет @Transactional Spring и используйте элемент в вашей конфигурации Spring. Это просто, и нужно обновить только одну аннотацию, чтобы удалить зависимость от Spring.
  • Создайте перехватчик, который выполняет логику до и после аннотированного метода. Используя Spring в качестве контейнера, вы должны делегировать обработку транзакций из советов перехватчика до и после в предпочитаемую вами реализацию PlatformTransactionManager.

Я писал о том, как можно создать перехватчик, который добавляет логику до и после метода, помеченного аннотацией здесь. И показал, какие методы вы должны использовать на PlatformTransactionManager здесь.

Надеюсь, это поможет!

3
ответ дан 6 December 2019 в 23:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: