2012-02-25 3 views
2

나는 설정하기 위해 다음과 같은 XML 기반 트랜잭션 - AOP를 프로그래밍 자바를 통해 싶습니다프로그래밍 방식의 트랜잭션 AOP?

<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> 

지금까지 나는 다음 있습니다. 그리고 아마도 내가 실제 조언을 설정할 수 있습니다 AspectJPointcutAdvisorAspectJAroundAdvice의 조합을 사용하여

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

: 나는 이런 식의 포인트 컷을 생성 할 수 있습니다.

그러나 tx 네임 스페이스를 뒷받침하는 스프링 코드를 보면 TransactionInterceptor이 생성 된 것처럼 보입니다. 어쩌면 나는이 모든 것을 잘못보고있다.

왜 내가 이것을하고 싶은가요?

XML에서 @Configuration 클래스로 스프링 구성을 옮겼습니다. 그러나 tx 네임 스페이스를 변환하는 방법에 대해 고민하고 있습니다. @EnableTransactionManagement@Transactional 주석을 사용하고 있지만 위에 설명 된 pointcut 표현식과 일치하는 모든 메소드에 주석을 추가하는 것은 너무 위험합니다. 나는 뭔가를 그리워 할 의무가있다.

답변

1

반면에 일치하는 모든 메소드에 트랜잭션을 적용하고 있습니다. 이렇게하는 것은 좋지 않습니다. 제 3 자 라이브러리의 메소드조차도 트랜잭션을 가질 것이기 때문에 매우 구체적입니다. 또한이 접근법에서는 입상 성이 좋지 않습니다. 보시다시피 동일한 속성을 추가하고 있습니다.

readOnly와 같은 속성은 매우 중요합니다. readOnly 트랜잭션은 플러시되지 않고 끝나지 않습니다. 단지 예입니다.