<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之旅 廣告
                ## 1. 什么是代理代理、 Jdk代理: 假如我們的業務需要符合一定的要求,做一些相關的業務,我們可以使用動態代理 ## 2.怎么理解動態代理 ## 3.代碼 public interface IService { public String BeforeAdvice(int id); public String AfterAdvice(int id); } public class IServiceImpl implements IService { public String BeforeAdvice(int id){ System.out.println("-------------advice--------------"); return "前置通知"+id; } public String AfterAdvice(int id){ return "后置通知"+id; } } public class MyInvovationHandler implements InvocationHandler{ private Object target; //們既然要做代理,我們必須知道我們是給誰做代理,這里的 obj就是被代理者。 Object result = null; public MyInvovationHandler(){ super(); } public MyInvovationHandler(Object target) { super(); this.target = target; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if("BeforeAdvice".equals(method.getName())){ System.out.println("+++++++ ++ ++before+++++++++++++"+method.getName()+"+++++++++++++++"); result = method.invoke(target,args); System.out.println("+++++++++++after+++++++++++++"+method.getName()+"++++ +++++++++++"); }else{ result = method.invoke(target, args); } return result; } } public class MainQ { public static void main(String[] args) { IServiceImpl iService = new IServiceImpl(); MyInvovationHandler invocationHandler = new MyInvovationHandler(iService); //通過剛才創建的InvocationHandler,創建真正的代理者。第一個參數是類加載器,第二個參數是這 // 個代理者實現哪些接口(與被代理者實現的是相同的接口) IService userServiceProxy = (IService) Proxy.newProxyInstance(iService.getClass().getClassLoader(), iService.getClass().getInterfaces(), invocationHandler); System.out.println(userServiceProxy.BeforeAdvice(1)); System.out.println(userServiceProxy.AfterAdvice(1)); } } ## cglib代理 public class CglibProxy implements MethodInterceptor{ @Override public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable { System.out.println("++++++before " + methodProxy.getSuperName() + "++++++"); System.out.println(method.getName()); Object o1 = methodProxy.invokeSuper(o, objects); System.out.println("++++++before " + methodProxy.getSuperName() + "++++++"); return o1; } } public class MainThread { public static void main(String[] args) { CglibProxy cglibProxy = new CglibProxy(); Enhancer enhancer = new Enhancer(); //主要的增強類 enhancer.setSuperclass(IServiceImpl.class); //設置父類,被增強的類 enhancer.setCallback(cglibProxy); //回調對象 IService o = (IService) enhancer.create();//用cglibProxy來增強UserServiceImpl o.BeforeAdvice(1); } } ## 總結: ### Jdk代理 我們定義了一個接口,里面有兩個方法,然后重寫這個兩個方法, 接著寫一個類用于實現InvocationHandler 然后重寫里面的方法invoke方法里面有三個參數,第一個參數是代理對象,第二個方法是:真實對象的方法,第三個參數是方法的 代理,然后通過Proxy.newProxyInstance()該方法第一個參數是實現類對象的加載器,實現類對象的實現接口,第三個是我們定義的處理方法 ### Cglib代理 實現了MethodInterceptor方法,重寫了intercept方法第一個參數是對象,第二個參數是方法,第三個是參數,第四個是代理類對象,然后通過反射類對象執行, Cglib代理類的調用實現過程 第一步: 創建代理類對象 CglibProxy cglibProxy = new CglibProxy(); 第二步:創建增強類對象 Enhancer enhancer = new Enhancer() enhancer.setSuperclass(IServiceImpl.class) 第三步:設置回調接口 enhancer.setCallback(cglibProxy) 第四步: 用cglibProxy來增強UserServiceImpl IService o = (IService) enhancer.create(); 第五步:調用方法 o.BeforeAdvice(1);
                  <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>

                              哎呀哎呀视频在线观看