Там какая-либо основанная на конфигурации альтернатива к @Transactional аннотации в Spring?
Я хочу сохранить свои классы Java максимально лишенными Spring, т.е. максимально отделенными от любой платформы.
Да, используя 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>
Аннотация - лучший выбор для пометки того, что метод должен выполняться в транзакции. Это рекомендуется как для Spring, так и для EJB 3.
Подход XML требует гораздо больше конфигурации, не является рефакторным, и вы должны видеть в конфигурации, будет ли определенный метод выполняться в транзакции или нет.
Поскольку поддержка транзакций на основе аннотаций является предпочтительным выбором для большинства разработчиков, а вам не нравится использовать аннотацию Spring @Transactional
, я порекомендую вам использовать пользовательскую аннотацию.
Тогда у вас есть два варианта:
@Transactional
Spring и используйте
элемент в вашей конфигурации Spring. Это просто, и нужно обновить только одну аннотацию, чтобы удалить зависимость от Spring. PlatformTransactionManager
. Я писал о том, как можно создать перехватчик, который добавляет логику до и после метода, помеченного аннотацией здесь. И показал, какие методы вы должны использовать на PlatformTransactionManager здесь.
Надеюсь, это поможет!