<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## Spring事務注解 #### @Transactional注解參數說明 ``` 事務傳播行為種類 Spring在TransactionDefinition接口中規定了7種類型的事務傳播行為 它們規定了事務方法和事務方法發生嵌套調用時事務如何進行傳播。 使用示例: @Transactional(propagation=Propagation.REQUIRED) ``` 事務傳播行為類型 | 說明 ---|--- PROPAGATION_REQUIRED | 如果當前沒有事務,就新建一個事務,如果已經存在一個事務中,加入到這個事務中。這是最常見的選擇。 PROPAGATION_SUPPORTS | 支持當前事務,如果當前沒有事務,就以非事務方式執行。 PROPAGATION_MANDATORY | 使用當前的事務,如果當前沒有事務,就拋出異常。 PROPAGATION_REQUIRES_NEW | 新建事務,如果當前存在事務,把當前事務掛起。 PROPAGATION_NOT_SUPPORTED | 以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。 PROPAGATION_NEVER | 以非事務方式執行,如果當前存在事務,則拋出異常。 PROPAGATION_NESTED | 如果當前存在事務,則在嵌套事務內執行。如果當前沒有事務,則執行與PROPAGATION_REQUIRED類 似的操作。 #### @Transational 注解失效原因排查 ``` 1、@Transactional 加于private方法,無效 2、@Transactional 加于未加入接口的public方法, 3、再通過普通接口方法調用,無效 4、@Transactional 加于接口方法,無論下面調用的是private或public方法,都有效 5、@Transactional 加于接口方法后,被本類普通接口方法直接調用,無效 6、@Transactional 加于接口方法后,被本類普通接口方法通過接口調用,有效 7、@Transactional 加于接口方法后,被它類的接口方法調用,有效 8、@Transactional 加于接口方法后,被它類的私有方法調用后,有效 ``` 原因: ``` @Transactional 失效的背后其實就是 Spring 代理機制造成的。說白了,就是通過 Spring 容器獲取的類對象,很多情況下并不是原類,而是被 Spring 修飾過了的代理類。然后,你在被代理的方法中調用當前類的其它方法,此時就是調用的原生類中的方法。 聽不懂沒關系,我下面用偽代碼給你演示一下,你就知道了。 假如現在要執行 Xttblog 類對象的方法 invoke(),而用 Spring 代理后,會對 Xttblog 類做修飾,也就是會對 Xttblog 的 test 方法生成一個代理類。 執行,調用代理方法 proxyXttblogbean.invoke(): before 操作 invoke(bean,Xttblog) after 操作 實際你運行的是 Spring 修飾過的代理類 proxyXttblogbean.invoke()方法。 這樣就會造成一個問題,如果你在 invoke() 中調用 Xttblog 類的其余方法 invoke2(),此時 invoke2() 是直接調用的原類的 Xttblog.invoke2(),而不是代理類 proxyXttblogbean.invoke2()。這時 Xttblog.invoke2() 上的一些注解全部都沒有被增強修飾。所以,最終的結果就和你的預期不一致了。 ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看