<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

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

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>

            JAVA的動態代理分析

            時間:2025-09-22 20:45:33 java語言

            JAVA的動態代理分析

              引導語:在使用動態代理類時,我們必須實現InvocationHandler接口,以下是百分網小編分享給大家的JAVA動態代理,歡迎閱讀了解!

              1,被代理類 的接口 Proxied

              Java代碼

              package Test1;

              /pic/p>

              public interface Proxied {

              void doSomething();

              void doSomethingElse(String str);

              }

              2,一個 Proxied接口 的實現類(被代理類)

              Java代碼

              package Test1;

              public class ConcreteProxied implements Proxied {

              @Override

              public void doSomething() {

              try {

              Thread.sleep(100);

              } catch (InterruptedException e) {

              System.err.println("Error : InterruptedException");

              }

              System.out.println(this.getClass().getSimpleName()

              + " >> doSomething .");

              }

              @Override

              public void doSomethingElse(String str) {

              try {

              Thread.sleep(150);

              } catch (InterruptedException e) {

              System.err.println("Error : InterruptedException");

              }

              System.out.println(this.getClass().getSimpleName()

              + " >> doSomethingElse , argument = " + str + ".");

              }

              }

              3,TimingInvocationHandler 類,實現了 InvocationHandler 接口

              Java代碼

              package Test1;

              import java.lang.reflect.InvocationHandler;

              import java.lang.reflect.Method;

              public class TimeingInvocationHandler implements InvocationHandler{

              /pic/p>

              private Object proxied;

              public TimeingInvocationHandler(Object proxied){

              this.proxied = proxied;

              }

              /pic/p>

              /pic/p>

              /pic/p>

              @Override

              public Object invoke(Object proxy, Method method, Object[] args)

              throws Throwable {

              System.out.println(method.getDeclaringClass().getName());

              long currentTimeMillis = System.currentTimeMillis();

              Object ret = method.invoke(proxied, args);

              System.out.println(this.getClass().getSimpleName()+" >> wastes time : "

              +(System.currentTimeMillis() - currentTimeMillis)+"ms");

              return ret;

              }

              }

              4,測試類 Test

              Java代碼

              package Test1;

              import java.lang.reflect.Proxy;

              public class TestProxy {

              public static void main(String[] args) {

              Proxied proxied = new ConcreteProxied();

              proxied.doSomething();

              proxied.doSomethingElse("only a String");

              /pic/p>

              /pic/p>

              Proxied proxy = (Proxied) Proxy.newProxyInstance(Proxied.class

              .getClassLoader(), /pic/p>

              new Class[] { Proxied.class }, /pic/p>

              new TimeingInvocationHandler(proxied) /pic/p>

              );

              proxy.doSomething();

              proxy.doSomethingElse("only a String");

              }

              }

              運行Test類,輸出如下:

              ConcreteProxied >> doSomething .

              ConcreteProxied >> doSomethingElse , argument = only a String.

              Test1.Proxied

              ConcreteProxied >> doSomething .

              TimeingInvocationHandler >> wastes time : 110ms

              Test1.Proxied

              ConcreteProxied >> doSomethingElse , argument = only a String.

              TimeingInvocationHandler >> wastes time : 156ms

            【JAVA的動態代理分析】相關文章:

            java使用動態代理來實現AOP01-24

            幾分鐘理解Java中的動態代理02-12

            java利用反射實現動態代理實現代碼11-23

            關于Java動態實現的方法09-25

            java動態方法調度實例07-02

            JAVA的動態考試系統的設計07-18

            JNI是怎樣java調用c動態庫08-26

            Java中如何實現顯示動態的時間03-14

            Java中靜態綁定和動態綁定的區別03-16

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

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

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院