Альтернатива конфигурации Spring @Transactional - PullRequest
7 голосов
/ 23 июня 2010

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

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

Ответы [ 2 ]

8 голосов
/ 23 июня 2010

Да, используя aop:config и tx:advice.Например:

<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>
3 голосов
/ 23 июня 2010

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

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...