Springのトランザクション管理機能を利用してトランザクションを実装したい。しかし、どちらが優れているかはわかりません(AOPと@Transactional)。両方の機能は正しく動作しますか? 開発効率に違いはありますか?
(追加) ここで AOP は「@Transactional アノテーションを明示的に使用せずに AspectJ を使用する」ことを意味します
(追記)annotation-configとXMLベースの設定の違いが知りたい
Springのトランザクション管理機能を利用してトランザクションを実装したい。しかし、どちらが優れているかはわかりません(AOPと@Transactional)。両方の機能は正しく動作しますか? 開発効率に違いはありますか?
(追加) ここで AOP は「@Transactional アノテーションを明示的に使用せずに AspectJ を使用する」ことを意味します
(追記)annotation-configとXMLベースの設定の違いが知りたい
私はこれを自分で疑問に思いました。Spring フォーラムで、このトピックに関する適切な議論を見つけました。
以下に、前述のリンクからの私の見解を要約します。
利点:
欠点:
@Transactional
春の注釈利点:
欠点:
この議論は、JPA アノテーションと JPA XML 構成の違いを思い出させます。XML ベースの JPA 構成では、エンティティーは「よりクリーン」になりますが、分離は努力する価値がありますか? それとも、分離は有害なのでしょうか (Java ソース ファイルを開いて、 @Entity アノテーションに基づいて、そのクラスが EJB であることがすぐにわかると便利です)。実際には、ほとんどの開発者が JPA アノテーションの使用を選択しているように思えます。ただし、この場合は とは異なり@Transactional
、jpa アノテーションは標準であるため、いくつかの懸念を緩和するのに役立つ場合があります。
そうは言っても、Spring の AOP 構成を使用して Struts2 (Webwork) インターセプターにアノテーションを付けて、リクエストごとに 1 つのトランザクションを許可するプロジェクトに参加しましたが、これはうまくいきました。この場合、サービス レイヤーや他の場所でのトランザクション境界について特に心配する必要はありませんでした。すべてが既にトランザクションに参加しており、インターセプターがトランザクションを閉じる前にビューがレンダリングされたため、OpenSession/EntityManagerInView
ソリューションを適用する必要はありませんでした。