春の伝播メカニズム上のご注意

同じクラスの春にその伝搬機構のものを使用することなく提供されるsaveA C方法Cは、伝搬特性が挿入されているメソッド呼び出しの実装において、例えば動作不能です

しかし、効果はsaveA実行方法は、C Cは、分離レベルセット法がスロー後に仕事をしないことを意味し、ロールバックレコードの原因です。

 @Transactional
    public void  saveA() throws  Exception{
         C();
         throw  new RuntimeException();
    }



    @Override
    @Transactional(propagation = Propagation.NOT_SUPPORTED)
    public void C() throws Exception {
        mapper.insertEntity(entity);
    }
次は、新しいクラスを作成しますserviceB

@Override
    @Transactional(propagation = Propagation.NOT_SUPPORTED)
    public void B() throws Exception {
        mapper.insertEntity(entity);
    }
@Transactional
    public void  saveA() throws  Exception{
        serviceB.B();
         throw  new RuntimeException();
    }



    @Override
    @Transactional(propagation = Propagation.NOT_SUPPORTED)
    public void C() throws Exception {
        mapper.insertEntity(entity);
    }

このとき、伝播するスプリングと、同じクラスのクラスメソッドに相互分離レベルがコール記録方法B呼び出しsaveAないロールバック機構は無効です。

このメソッドは、クラスAOP CglibAopProxyによる内部クラスDynamicAdvisedInterceptorコールのばねであり、そしてDynamicAdvisedInterceptorはインターセプトメソッド呼び出しに対して、MethodInterceptorのを継承し、呼び出しチェーンを得ました。


メソッドが同じクラスで呼び出された場合、メソッドはインターセプタを傍受することができない、トランザクションは動作しません。そのため、この方法は、別のクラスを配置する必要があり、かつばねにより、クラス注射



公開された55元の記事 ウォン称賛31 ビュー80000 +

おすすめ

転載: blog.csdn.net/zengfanwei1990/article/details/79105620