JDK动态代理
This commit is contained in:
187
.idea/workspace.xml
generated
187
.idea/workspace.xml
generated
@@ -2,9 +2,8 @@
|
||||
<project version="4">
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="87524ed3-9f15-48af-90a2-b58ffb27674c" name="Default" comment="">
|
||||
<change beforePath="" afterPath="$PROJECT_DIR$/src/com/fjy/proxy/StaticProxy/CarLogProxy.java" />
|
||||
<change beforePath="" afterPath="$PROJECT_DIR$/src/com/fjy/proxy/StaticProxy/CarTimeProxy.java" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/vcs.xml" afterPath="$PROJECT_DIR$/.idea/vcs.xml" />
|
||||
<change beforePath="" afterPath="$PROJECT_DIR$/src/com/fjy/proxy/JDKProxy/TimeHandler.java" />
|
||||
<change beforePath="" afterPath="$PROJECT_DIR$/src/com/fjy/proxy/JDKProxy/TimeHandlerTest.java" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
|
||||
<change beforePath="$PROJECT_DIR$/out/production/JavaBase/com/fjy/proxy/StaticProxy/Client.class" afterPath="$PROJECT_DIR$/out/production/JavaBase/com/fjy/proxy/StaticProxy/Client.class" />
|
||||
<change beforePath="$PROJECT_DIR$/src/com/fjy/proxy/StaticProxy/Client.java" afterPath="$PROJECT_DIR$/src/com/fjy/proxy/StaticProxy/Client.java" />
|
||||
@@ -19,11 +18,45 @@
|
||||
</component>
|
||||
<component name="FileEditorManager">
|
||||
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
|
||||
<file leaf-file-name="Client.java" pinned="false" current-in-tab="true">
|
||||
<file leaf-file-name="Client.java" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/src/com/fjy/proxy/StaticProxy/Client.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="184">
|
||||
<caret line="8" column="24" lean-forward="true" selection-start-line="8" selection-start-column="24" selection-end-line="8" selection-end-column="24" />
|
||||
<state relative-caret-position="-240">
|
||||
<caret line="11" column="0" lean-forward="false" selection-start-line="11" selection-start-column="0" selection-end-line="11" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="TimeHandler.java" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/src/com/fjy/proxy/JDKProxy/TimeHandler.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="339">
|
||||
<caret line="32" column="20" lean-forward="true" selection-start-line="32" selection-start-column="20" selection-end-line="32" selection-end-column="20" />
|
||||
<folding>
|
||||
<element signature="imports" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="TimeHandlerTest.java" pinned="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/src/com/fjy/proxy/JDKProxy/TimeHandlerTest.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="385">
|
||||
<caret line="22" column="23" lean-forward="true" selection-start-line="22" selection-start-column="23" selection-end-line="22" selection-end-column="23" />
|
||||
<folding>
|
||||
<element signature="imports" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="Proxy.java" pinned="false" current-in-tab="false">
|
||||
<entry file="jar://C:/Program Files/Java/jdk1.8.0_151/src.zip!/java/lang/reflect/Proxy.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-573">
|
||||
<caret line="702" column="25" lean-forward="false" selection-start-line="702" selection-start-column="25" selection-end-line="702" selection-end-column="25" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
@@ -42,8 +75,8 @@
|
||||
<file leaf-file-name="CarTimeProxy.java" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/src/com/fjy/proxy/StaticProxy/CarTimeProxy.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="138">
|
||||
<caret line="6" column="10" lean-forward="false" selection-start-line="6" selection-start-column="10" selection-end-line="6" selection-end-column="10" />
|
||||
<state relative-caret-position="368">
|
||||
<caret line="16" column="0" lean-forward="false" selection-start-line="16" selection-start-column="0" selection-end-line="18" selection-end-column="49" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
@@ -52,8 +85,18 @@
|
||||
<file leaf-file-name="CarLogProxy.java" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/src/com/fjy/proxy/StaticProxy/CarLogProxy.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="115">
|
||||
<caret line="5" column="10" lean-forward="false" selection-start-line="5" selection-start-column="4" selection-end-line="5" selection-end-column="10" />
|
||||
<state relative-caret-position="345">
|
||||
<caret line="15" column="0" lean-forward="false" selection-start-line="15" selection-start-column="0" selection-end-line="15" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="Car.java" pinned="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/src/com/fjy/proxy/StaticProxy/Car.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="322">
|
||||
<caret line="14" column="0" lean-forward="false" selection-start-line="14" selection-start-column="0" selection-end-line="14" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
@@ -107,6 +150,8 @@
|
||||
<option value="$PROJECT_DIR$/src/com/fjy/proxy/StaticProxy/CarLogProxy.java" />
|
||||
<option value="$PROJECT_DIR$/src/com/fjy/proxy/StaticProxy/CarTimeProxy.java" />
|
||||
<option value="$PROJECT_DIR$/src/com/fjy/proxy/StaticProxy/Client.java" />
|
||||
<option value="$PROJECT_DIR$/src/com/fjy/proxy/JDKProxy/TimeHandler.java" />
|
||||
<option value="$PROJECT_DIR$/src/com/fjy/proxy/JDKProxy/TimeHandlerTest.java" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
@@ -160,6 +205,13 @@
|
||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="proxy" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="JavaBase" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="JavaBase" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="src" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="proxy" type="462c0819:PsiDirectoryNode" />
|
||||
<item name="JDKProxy" type="462c0819:PsiDirectoryNode" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="JavaBase" type="b2602c69:ProjectViewProjectNode" />
|
||||
<item name="JavaBase" type="462c0819:PsiDirectoryNode" />
|
||||
@@ -195,7 +247,7 @@
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="RunManager" selected="Application.Client">
|
||||
<component name="RunManager" selected="Application.TimeHandlerTest">
|
||||
<configuration name="Client" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
|
||||
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea">
|
||||
<pattern>
|
||||
@@ -231,6 +283,25 @@
|
||||
<RunnerSettings RunnerId="Run" />
|
||||
<ConfigurationWrapper RunnerId="Run" />
|
||||
</configuration>
|
||||
<configuration name="TimeHandlerTest" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
|
||||
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea">
|
||||
<pattern>
|
||||
<option name="PATTERN" value="com.fjy.proxy.JDKProxy.*" />
|
||||
<option name="ENABLED" value="true" />
|
||||
</pattern>
|
||||
</extension>
|
||||
<option name="MAIN_CLASS_NAME" value="com.fjy.proxy.JDKProxy.TimeHandlerTest" />
|
||||
<option name="VM_PARAMETERS" />
|
||||
<option name="PROGRAM_PARAMETERS" />
|
||||
<option name="WORKING_DIRECTORY" />
|
||||
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
|
||||
<option name="ALTERNATIVE_JRE_PATH" />
|
||||
<option name="ENABLE_SWING_INSPECTOR" value="false" />
|
||||
<option name="ENV_VARIABLES" />
|
||||
<option name="PASS_PARENT_ENVS" value="true" />
|
||||
<module name="JavaBase" />
|
||||
<envs />
|
||||
</configuration>
|
||||
<configuration default="true" type="Application" factoryName="Application">
|
||||
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
|
||||
<option name="MAIN_CLASS_NAME" />
|
||||
@@ -246,13 +317,15 @@
|
||||
<envs />
|
||||
<method />
|
||||
</configuration>
|
||||
<list size="2">
|
||||
<list size="3">
|
||||
<item index="0" class="java.lang.String" itemvalue="Application.Main" />
|
||||
<item index="1" class="java.lang.String" itemvalue="Application.Client" />
|
||||
<item index="2" class="java.lang.String" itemvalue="Application.TimeHandlerTest" />
|
||||
</list>
|
||||
<recent_temporary>
|
||||
<list size="1">
|
||||
<item index="0" class="java.lang.String" itemvalue="Application.Client" />
|
||||
<list size="2">
|
||||
<item index="0" class="java.lang.String" itemvalue="Application.TimeHandlerTest" />
|
||||
<item index="1" class="java.lang.String" itemvalue="Application.Client" />
|
||||
</list>
|
||||
</recent_temporary>
|
||||
</component>
|
||||
@@ -269,12 +342,20 @@
|
||||
<option name="number" value="Default" />
|
||||
<option name="presentableId" value="Default" />
|
||||
<updated>1522581153869</updated>
|
||||
<workItem from="1522581156473" duration="1950000" />
|
||||
<workItem from="1522581156473" duration="3911000" />
|
||||
</task>
|
||||
<task id="LOCAL-00001" summary="模块化代理">
|
||||
<created>1522583131277</created>
|
||||
<option name="number" value="00001" />
|
||||
<option name="presentableId" value="LOCAL-00001" />
|
||||
<option name="project" value="LOCAL" />
|
||||
<updated>1522583131278</updated>
|
||||
</task>
|
||||
<option name="localTasksCounter" value="2" />
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TimeTrackingManager">
|
||||
<option name="totallyTimeSpent" value="1950000" />
|
||||
<option name="totallyTimeSpent" value="3911000" />
|
||||
</component>
|
||||
<component name="ToolWindowManager">
|
||||
<frame x="-7" y="0" width="1009" height="1047" extended-state="0" />
|
||||
@@ -299,7 +380,7 @@
|
||||
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="UI Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Theme Preview" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.39934355" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="-1" side_tool="true" content_ui="tabs" />
|
||||
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
|
||||
@@ -315,8 +396,14 @@
|
||||
<component name="VcsContentAnnotationSettings">
|
||||
<option name="myLimit" value="2678400000" />
|
||||
</component>
|
||||
<component name="VcsManagerConfiguration">
|
||||
<MESSAGE value="模块化代理" />
|
||||
<option name="LAST_COMMIT_MESSAGE" value="模块化代理" />
|
||||
</component>
|
||||
<component name="XDebuggerManager">
|
||||
<breakpoint-manager />
|
||||
<breakpoint-manager>
|
||||
<option name="time" value="1" />
|
||||
</breakpoint-manager>
|
||||
<watches-manager />
|
||||
</component>
|
||||
<component name="editorHistoryManager">
|
||||
@@ -344,6 +431,14 @@
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="jar://C:/Program Files/Java/jdk1.8.0_151/src.zip!/java/lang/Object.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="194">
|
||||
<caret line="36" column="13" lean-forward="false" selection-start-line="36" selection-start-column="13" selection-end-line="36" selection-end-column="13" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/src/com/fjy/proxy/StaticProxy/CarAggregation.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="161">
|
||||
@@ -354,35 +449,63 @@
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/src/com/fjy/proxy/StaticProxy/Car.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="92">
|
||||
<caret line="4" column="13" lean-forward="false" selection-start-line="4" selection-start-column="13" selection-end-line="4" selection-end-column="13" />
|
||||
<state relative-caret-position="322">
|
||||
<caret line="14" column="0" lean-forward="false" selection-start-line="14" selection-start-column="0" selection-end-line="14" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/src/com/fjy/proxy/StaticProxy/CarLogProxy.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="115">
|
||||
<caret line="5" column="10" lean-forward="false" selection-start-line="5" selection-start-column="4" selection-end-line="5" selection-end-column="10" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/src/com/fjy/proxy/StaticProxy/CarTimeProxy.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="138">
|
||||
<caret line="6" column="10" lean-forward="false" selection-start-line="6" selection-start-column="10" selection-end-line="6" selection-end-column="10" />
|
||||
<state relative-caret-position="345">
|
||||
<caret line="15" column="0" lean-forward="false" selection-start-line="15" selection-start-column="0" selection-end-line="15" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/src/com/fjy/proxy/StaticProxy/Client.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="184">
|
||||
<caret line="8" column="24" lean-forward="true" selection-start-line="8" selection-start-column="24" selection-end-line="8" selection-end-column="24" />
|
||||
<state relative-caret-position="-240">
|
||||
<caret line="11" column="0" lean-forward="false" selection-start-line="11" selection-start-column="0" selection-end-line="11" selection-end-column="0" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/src/com/fjy/proxy/StaticProxy/CarTimeProxy.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="368">
|
||||
<caret line="16" column="0" lean-forward="false" selection-start-line="16" selection-start-column="0" selection-end-line="18" selection-end-column="49" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/src/com/fjy/proxy/JDKProxy/TimeHandler.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="339">
|
||||
<caret line="32" column="20" lean-forward="true" selection-start-line="32" selection-start-column="20" selection-end-line="32" selection-end-column="20" />
|
||||
<folding>
|
||||
<element signature="imports" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="jar://C:/Program Files/Java/jdk1.8.0_151/src.zip!/java/lang/reflect/Proxy.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="-573">
|
||||
<caret line="702" column="25" lean-forward="false" selection-start-line="702" selection-start-column="25" selection-end-line="702" selection-end-column="25" />
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/src/com/fjy/proxy/JDKProxy/TimeHandlerTest.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state relative-caret-position="385">
|
||||
<caret line="22" column="23" lean-forward="true" selection-start-line="22" selection-start-column="23" selection-end-line="22" selection-end-column="23" />
|
||||
<folding>
|
||||
<element signature="imports" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</component>
|
||||
</project>
|
||||
Binary file not shown.
35
src/com/fjy/proxy/JDKProxy/TimeHandler.java
Normal file
35
src/com/fjy/proxy/JDKProxy/TimeHandler.java
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
25
src/com/fjy/proxy/JDKProxy/TimeHandlerTest.java
Normal file
25
src/com/fjy/proxy/JDKProxy/TimeHandlerTest.java
Normal file
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user