1:トランザクション方法Aがある場合、次のコードに示すように、同じクラスでは、B法は、トランザクション(伝播= Propagation.REQUIRES_NEW)を有しています。
@Override
@Transactional
公共ボイドinsertUser(ユーザーユーザー、製品グッズ){
userMapper.insert(ユーザー)
のtry {
}キャッチ(例外e){
}
}
@Override
@Transactional(=伝播Propagation.REQUIRES_NEW)
公共ボイドinsertGoods(グッズグッズ)例外{スロー
goodsMapper.insert(製品);
スロー新しい新しい例外(「SADF」);
}
Bがデータに挿入される場合は、トランザクションのロールバックがありません。
2:春のトランザクションの実装メカニズム:春のトランザクションがAOPの原理を使用して実装され、実際には、ダイナミックな薬剤である、エージェントの役割は、ダイナミック強調方法を達成することです。
動的プロキシ二つの重要なクラスが必要です。プロキシとのInvocationHandler
プロキシ:新しいオブジェクトの責任
のInvocationHandler:強化のための
注意事項:@Auword、だけでなく、プロキシモードを達成するために3
春のコンテナが起動しているような演技、すべてのクラスは、すべてのスキャンが、発見後にコメントを追加するときに、この方法は、キー値として注釈され、地図<キー、リスト<バリュー>>
インターセプタに対応する異なるノートは同じではありません
4:1のアプリケーションクラスにアノテーションを追加し、springbootプロジェクトで、問題を解決するために @EnableAspectJAutoProxy(真exposeProxy =)
エージェントがトランザクションを達成するために、実装の拡張方法の前後に、動的とすることができるので、そのメソッドB:プロセスは、その後、Aの方法で実施されます。
@Override
@Transactional
公共ボイドinsertUser(ユーザーのユーザー、製品品){
userMapper.insert(ユーザ)。
試す{
IUserServiceサービス=(IUserService)AopContext.currentProxy();
service.insertGoods(財);
}キャッチ(例外e){
}
}
@Override
@Transactional(伝播= Propagation.REQUIRES_NEW)
公共ボイドinsertGoods(雑貨品)例外{スロー
goodsMapper.insert(財)。
新しい例外(「SADF」)を投げます。
}