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

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] # 簡介 在Java里面,我們要產生某個對象的代理對象,這個對象必須要有一個特點,即這個對象必須實現一個接口,動態代理技術只能基于接口進行代理。有時候我們在做開發的時候,這個對象就沒有實現接口,有人可能會說,它既然沒有接口,那我就給它定義一個接口,這是不行的,因為有時候我們拿到一個對象,而這個對象是服務器產生給我們的,是服務器提供給我們的,又不是我們自己寫的,動不動就給它定義一個接口,是不行的. CGLIB了,這套API,即使沒有接口,它也可以幫我們產生這個對象的代理對象。它的內部是怎么去產生這個對象的代理對象的呢?——實際上產生的是這個對象的子類,也即我們把一個對象交給CGLIB,它返回出來的似乎是一個代理對象(但它不是要產生一個對象的代理對象),但其實這個代理對象就是這個對象的子類,利用子類的方式來創建代理對象。在Spring里面就是這樣做的,Spring里面有一個AOP編程(即面向切面編程,說白了就是動態代理,我們經常會交給Spring一個對象,它就會返回代理對象給我們,它在返回代理對象的時候,首先會檢查我們這個對象有沒有實現一個接口,如果我們這個類有接口,它使用Java的動態代理技術來幫我們構建出代理對象;如果我們這個類沒有實現接口,它會使用CGLIB這套API,采用創建子類的方式來創建代理對象) # 例子 寫一個類,一些類還是用上面的aop的 ~~~ package proxy; import java.lang.reflect.Method; import org.springframework.cglib.proxy.Enhancer; import org.springframework.cglib.proxy.MethodInterceptor; import org.springframework.cglib.proxy.MethodProxy; import service.UserService; import service.UserServiceImpl; public class UserServiceProxyFactory2 implements MethodInterceptor { /** * 代理的目標對象 */ private Object targetObject; public Object getObjectProxy(Object targetObject) { this.targetObject = targetObject; // 幫我們生成代理對象 Enhancer en = new Enhancer(); // 告訴他被代理對象,設置對誰進行代理,設置目標類為代理對象的父類 en.setSuperclass(this.targetObject.getClass()); // 代理要做什么,設置回調用對象為本身 en.setCallback(this); // 創建代理對象 return en.create(); } /** * 第一個參數 被代理原始對象 * 第二個參數 被代理對象的方法 * 第三個參數 運行期參數 * 第四個參數 代理方法對象 */ @Override public Object intercept(Object proxyobj, Method method, Object[] arg, MethodProxy methodProxy) throws Throwable { // 打開事務 System.out.println("打開事務"); // 調用原有方法 Object returnValue = methodProxy.invokeSuper(proxyobj, arg); // 提交事務 System.out.println("提交事務事務"); return returnValue; } } ~~~ 測試方法 ~~~ @Test public void index() { UserServiceProxyFactory2 factory = new UserServiceProxyFactory2(); UserService usProxy = (UserService) factory.getObjectProxy(new UserServiceImpl()); usProxy.save(); // 判斷代理對象是否屬于被代理對象 System.out.println(usProxy instanceof UserServiceImpl); } ~~~
                  <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>

                              哎呀哎呀视频在线观看