2012-02-25 3 views
2

Я хотел бы на основе транзакционного-АОП следующего 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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^