Программный транзакционный АОП? - PullRequest
3 голосов
/ 25 февраля 2012

Я хотел бы настроить следующую транзакционную AOP на основе XML программно через Java:

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="*"/>
    </tx:attributes>
</tx:advice>

<aop:config>
    <aop:advisor id="managerTx" advice-ref="txAdvice" pointcut="execution(* *..service.*Manager.*(..))" order="2"/>
</aop:config>

Пока у меня есть следующее.Я могу создать выражение pointcut следующим образом:

   AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();
   pointcut.setExpression("execution(* *..service.*Manager.*(..))");

Тогда, возможно, используя комбинацию AspectJPointcutAdvisor и AspectJAroundAdvice, я могу настроить фактический совет.

Однако, глядя накод Spring, который поддерживает пространство имен tx, похоже, TransactionInterceptor создан.Может быть, я смотрю на все это неправильно.

Почему я хочу это сделать, спросите вы?

Хорошо, я переместил свою весеннюю конфигурацию из XML в классы @Configuration, но я 'Я застрял на том, как перевести вещи пространства имен TX.Хотя я использую аннотации @EnableTransactionManagement и @Transactional, слишком рискованно добавлять аннотацию ко всем методам, совпадающим с выражением pointcut, описанным выше.Я обязательно что-то упущу.

1 Ответ

1 голос
/ 25 февраля 2012

С другой стороны, вы применяете транзакцию ко всем подходящим методам. Я не рекомендую вам делать это. Будьте очень конкретны в выражении, поскольку даже методы из сторонних библиотек будут иметь транзакцию. А также гранулярность с этим подходом оставляет желать лучшего. Как я вижу, вы добавляете те же свойства.

Свойства типа readOnly очень важны. Операция readOnly не сбрасывает и конец. Просто пример.

...