Весенние транзакции - смешивание @Transactional с <tx: advice> в пользовательскую аннотацию - PullRequest
1 голос
/ 19 апреля 2010

Моя цель состоит в том, чтобы как-то объявить мои классы обслуживания транзакционными. Я не хочу оставлять это как явное объявление в весенней конфигурации. Много раз в прошлом мы создавали новые сервисы и забывали объявлять транзакции вокруг них. Следовательно, я намерен сделать так, чтобы у меня было что-то вроде пользовательской аннотации @TransactionalService, и она должна делать следующее: 1. обеспечивает поддержку транзакций 2. объявляет некоторые правила по умолчанию для поддержки транзакций, которые Spring предоставляет в настоящее время, как показано ниже. Но в отличие от весны, я бы хотел, чтобы нижеприведенное было частью моей аннотации @TransactionService.

<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<!-- all methods starting with 'get' are read-only -->
<tx:method name="get*" read-only="true"/>
<tx:method name="*"/>

Какой совет будет ценным?

1 Ответ

0 голосов
/ 07 апреля 2011

Конечно, вместо того, чтобы создавать новую аннотацию, вы можете просто поместить ваши транзакционные сервисы в один пакет, и тогда ваш pointcut (только один для всех ваших транзакционных сервисов) будет выглядеть так:

<aop:config>
  <aop:pointcut id="transactionnalServiceMethods" expression="execution(* x.y.transactionnalservice.*.*(..))"/>
  <aop:advisor advice-ref="txAdvice" pointcut-ref="transactionnalServiceMethods"/>
</aop:config>

Совет такой же, как указано выше:

  <tx:advice id="txAdvice" transaction-manager="txManager">
  <tx:attributes>
    <!-- all methods starting with 'get' are read-only -->
    <tx:method name="get*" read-only="true"/>
    <tx:method name="*"/>
  </tx:attributes>
  </tx:advice>
...