<delect id="sj01t"></delect>
  1. <em id="sj01t"><label id="sj01t"></label></em>
  2. <div id="sj01t"></div>
    1. <em id="sj01t"></em>

            <div id="sj01t"></div>

            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

            <delect id="sj01t"></delect>
            1. <em id="sj01t"><label id="sj01t"></label></em>
            2. <div id="sj01t"></div>
              1. <em id="sj01t"></em>

                      <div id="sj01t"></div>
                      黄色视频在线观看