From 08bdf936c9ac6efdfe6528557985ba9f67cc5884 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=E5=98=89=E9=98=B3?= Date: Sun, 1 Apr 2018 20:35:36 +0800 Subject: [PATCH] =?UTF-8?q?JDK=E5=8A=A8=E6=80=81=E4=BB=A3=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/workspace.xml | 187 +++++++++++++++--- .../com/fjy/proxy/StaticProxy/Client.class | Bin 1967 -> 1933 bytes src/com/fjy/proxy/JDKProxy/TimeHandler.java | 35 ++++ .../fjy/proxy/JDKProxy/TimeHandlerTest.java | 25 +++ src/com/fjy/proxy/StaticProxy/Client.java | 5 +- 5 files changed, 217 insertions(+), 35 deletions(-) create mode 100644 src/com/fjy/proxy/JDKProxy/TimeHandler.java create mode 100644 src/com/fjy/proxy/JDKProxy/TimeHandlerTest.java diff --git a/.idea/workspace.xml b/.idea/workspace.xml index e99ca21..8e50812 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,9 +2,8 @@ - - - + + @@ -19,11 +18,45 @@ - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -42,8 +75,8 @@ - - + + @@ -52,8 +85,18 @@ - - + + + + + + + + + + + + @@ -107,6 +150,8 @@ @@ -160,6 +205,13 @@ + + + + + + + @@ -195,7 +247,7 @@ - + @@ -231,6 +283,25 @@ + + + + + + - + + - - + + + @@ -269,12 +342,20 @@ - @@ -299,7 +380,7 @@ - + @@ -315,8 +396,14 @@ + + + - + + @@ -344,6 +431,14 @@ + + + + + + + + @@ -354,35 +449,63 @@ - - + + - - - - - - - - - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/out/production/JavaBase/com/fjy/proxy/StaticProxy/Client.class b/out/production/JavaBase/com/fjy/proxy/StaticProxy/Client.class index 475e7b3bc076bc506ae7649503eac3b2b783890c..73cba62ac1d817441e474f29f1b31ca1c936fd6e 100644 GIT binary patch delta 766 zcmZva%Wo1<6oBTy_*XtA_DN}+1e`o{XG*ecX#V#3Cin{JE?H?C&w!j1e5 zu1z%oEs1gMA7wmuTA?-0By;Y`J?HzK$9&Fw$V9(>@BIMQcy5?s%~0f0lFM8PxN5k@ zbZx zmU#Ac!E39iD3#mCMLBs)BmA9*ZtQZ5Xq#_AmjwSfE=+?+QcF~aW+(VhB$U_#8{Nl=D>th`e) ztK68JCBbRV#Neg>gOe57EQR(`|ewtC(mMq(X>hMPyDyDl&aL%K2ERATZn1ehVcu4OV0(#;#hd-O)Rdbj2=N z$*CifIV*X*J7T)m7?R&!8Bmxgmu1<=&;uEH|BX&JYq4fkXtvqEnrY6(|G}aZx=J(N JiCwM3#Xp_uO(XyS delta 777 zcmZ9J%Tg0j5Qe{*NpfaR1~Nnv2uUR31xZjq@s1cTsF>jWQrWn2!^V{^T+I`>u;w+a zvZ7T7<1K_YaZ9R z;j*E*$)@6##x*f6O_$q>I~w2kzVYuW?r8$HvfMZR1I0tlG~0?tnj+iAG!-pH+aj~E z`+oPsX7{6S&y}h8EE%(G%nB97j?ZJBL|^Px@2Sr-o?BF-no~{tyr2^OvG+1%UMgNi zU!Av3nb$uiQd?G7k|xZT!9uWNtKzN5ZONUk_p!S2usNOtfy2DK{rv!HoDk1rfs;vc zQ+$)G2iOCg0jUE*o>Uy|phYrE=n3cmr#Z!GlggQKEiDl@xWaeR`AiQr#O?I)TJ;|K zC^;vi4&+S99P?vvK$=C)#$Xv+Ql|ljV{$eo`$C>DORo0f`c50Gu+8e1%vdWs! R7o@TaT#UD{E($i6{sA-XP_Y02 diff --git a/src/com/fjy/proxy/JDKProxy/TimeHandler.java b/src/com/fjy/proxy/JDKProxy/TimeHandler.java new file mode 100644 index 0000000..4c18d1b --- /dev/null +++ b/src/com/fjy/proxy/JDKProxy/TimeHandler.java @@ -0,0 +1,35 @@ +package com.fjy.proxy.JDKProxy; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; + +public class TimeHandler implements InvocationHandler { + + private Object target; + + public TimeHandler(Object target) { + super(); + this.target = target; + } + + /** + * + * @param proxy 被代理对象 + * @param method 被代理对象的方法 + * @param args 方法的参数 + * @return Object方法的返回值 + * @throws Throwable + */ + @Override + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + long startTime = System.currentTimeMillis(); + System.out.println("汽车开始行驶..."); + + method.invoke(target); + + long endTime = System.currentTimeMillis(); + System.out.println("汽车结束行驶.... 汽车行驶时间:" + + (endTime - startTime) + "毫秒!"); + return null; + } +} diff --git a/src/com/fjy/proxy/JDKProxy/TimeHandlerTest.java b/src/com/fjy/proxy/JDKProxy/TimeHandlerTest.java new file mode 100644 index 0000000..7b2bbf3 --- /dev/null +++ b/src/com/fjy/proxy/JDKProxy/TimeHandlerTest.java @@ -0,0 +1,25 @@ +package com.fjy.proxy.JDKProxy; + +import com.fjy.proxy.StaticProxy.Car; +import com.fjy.proxy.StaticProxy.MoveAble; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Proxy; + +public class TimeHandlerTest { + //时间JDK动态测试类 + public static void main(String[] args) { + Car car = new Car(); + InvocationHandler handler = new TimeHandler(car); + Class carClass = car.getClass();//通过反射获取类类型 + + /*三个参数分别是:类加载器、实现接口、时间处理器 + newProxyInstance(ClassLoader loader,Class[] interfaces,InvocationHandler h) + 由于都实现了MoveAble接口,故将返回的动态代理对象强制类型转换为MoveAble接口对象 + */ + MoveAble moveAble = (MoveAble)Proxy.newProxyInstance(carClass.getClassLoader(), + carClass.getInterfaces(), handler); + + moveAble.run(); + } +} diff --git a/src/com/fjy/proxy/StaticProxy/Client.java b/src/com/fjy/proxy/StaticProxy/Client.java index 2ec46b7..26228ea 100644 --- a/src/com/fjy/proxy/StaticProxy/Client.java +++ b/src/com/fjy/proxy/StaticProxy/Client.java @@ -6,8 +6,8 @@ public class Client { * @param args */ public static void main(String[] args) { - RunByCarProxy(); - RunByCarAggregationProxy(); + //RunByCarProxy(); + //RunByCarAggregationProxy(); RunByModulProxy(); } //直接运行 @@ -37,7 +37,6 @@ public class Client { CarLogProxy carLogProxy = new CarLogProxy(car); CarTimeProxy carTimeProxy = new CarTimeProxy(carLogProxy); carTimeProxy.run(); - }