<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之旅 廣告
                ## 動態代理的細節 接口 ~~~ public interface Person { public void run(); public void fly(); public String sleep(); public String eat(String name); } ~~~ 被裝飾類 ~~~ public class NormalPerson implements Person { @Override public void run() { System.out.println("走"); } @Override public void fly() { System.out.println("飛"); } public String sleep() { return "abcd"; } @Override public String eat(String name) { System.out.println("吃" + name); return "吃飽了"; } } ~~~ 調用 ~~~ public static void main(String[] args) { final NormalPerson normalPerson = new NormalPerson(); //使用JDK提供的動態代理動態代理的方式增強 /** * 參數1:和要被增強的對象一樣的類加載器 * 參數2:和要被增強的對象一樣的接口 * 1.根據指定的傳遞接口返回一個該接口下的實例 * 2.傳遞的接口里面的方法就是可以被增強的所有方法,被增強類自己的方法無法被增強 * 參數3:所有的增強業務的實現(方法) */ Person proxyInstance = (Person) Proxy.newProxyInstance( normalPerson.getClass().getClassLoader(), normalPerson.getClass().getInterfaces(), //匿名內部類 new InvocationHandler() { //invoke里面就是所有的增強業務邏輯代碼 /** * 參數1:不用管,永遠是固定值,代理對象的類型 * 參數2:要被增強的方法 * 參數3:要被增強的方法運行過程中需要的參數 */ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //讓之前的方法執行 /** * 參數1:本身執行這個方法的對象 * 參數2:執行這個方法需要的參數 */ method.invoke(normalPerson, args); //寫增強業務邏輯 System.out.println("走變飛"); //只針對某個方法進行增強 if ("eat".equals(method.getName())){ System.out.println("只調用eat的方法"); } //誰調用就返回給誰,需要被代理類的支持 return "1234"; //如果按照這樣寫返回值的內容就是"abcd" // return method.invoke(normalPerson,args); } } ); proxyInstance.run(); //執行這個方法invoke都會執行一遍,執行的內容就是針對該方法的增強. proxyInstance.fly(); //執行這個方法invoke都會執行一遍,執行的內容就是針對該方法的增強. String val1 = proxyInstance.sleep(); //這里得到的返回值是invoke中返回的返回值 System.out.println(val1); String val2 = proxyInstance.eat("榴蓮"); System.out.println(val2); } ~~~
                  <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>

                              哎呀哎呀视频在线观看