春天动态代理

Java的代码  收藏代码
  1.  cn.itcast.day3;  
  2.   
  3. 进口 java.lang.reflect.Method中;  
  4.   
  5. 公共 接口 忠告{  
  6.     无效 beforeMethod(方法方法);  
  7.     无效 afterMethod(方法方法);  
  8. }  
  9.   
  10.  cn.itcast.day3;  
  11.   
  12. 进口 java.lang.reflect.Method中;  
  13.   
  14. 公共  MyAdvice  实现 咨询{  
  15.      BEGINTIME =  ;  
  16.     公共 无效 afterMethod(方法方法){  
  17.         // TODO自动生成方法存根  
  18.         的System.out.println( “ 从传智播客毕业上班啦!” );        
  19.          endTime的= System.currentTimeMillis的();  
  20.         的System.out.println(method.getName()+  “运行时间”  +(endTime的- BEGINTIME));  
  21.   
  22.     }  
  23.   
  24.     公共 无效 beforeMethod(方法方法){  
  25.         // TODO自动生成方法存根  
  26.         的System.out.println( “ 到传智播客来学习啦!” );  
  27.         BEGINTIME = System.currentTimeMillis的();  
  28.     }  
  29.   
  30. }  
  31.   
  32.  cn.itcast.day3;  
  33.   
  34. 进口 java.lang.reflect.Constructor中;  
  35. 进口 java.lang.reflect.InvocationHandler;  
  36. 进口 java.lang.reflect.Method中;  
  37. 进口 java.lang.reflect.Proxy;  
  38. 进口 的java.util.ArrayList;  
  39. 进口 java.util.Collection的;  
  40.   
  41. 公共  ProxyTest {  
  42.   
  43.     / ** 
  44.      * @参数的args 
  45.      * /  
  46.     @SuppressWarnings “选中” )  
  47.     公共 静态 无效 的主要(字串[] args){  
  48. //类clazzProxy1 = Proxy.getProxyClass(Collection.class.getClassLoader(),Collection.class);  
  49. //的System.out.println(clazzProxy1.getName());  
  50. //        
  51. //的System.out.println(“----------开始构造函数列表----------”);  
  52. // / * $ Proxy0()  
  53. // $ Proxy0(InvocationHandler的,INT)* /  
  54. //构造[] =构造clazzProxy1.getConstructors();  
  55. //为(构造器Constructor:构造函数){  
  56. //字符串名称= constructor.getName();  
  57. // StringBuilder的sBuilder =新的StringBuilder(名称);  
  58. // sBuilder.append('(');  
  59. //类[] clazzParams = constructor.getParameterTypes();  
  60. //为(类clazzParam:clazzParams){  
  61. // sBuilder.append(clazzParam.getName())附加(“,”);  
  62. //}  
  63. 如果//(clazzParams!= NULL && clazzParams.length!= 0)  
  64. // sBuilder.deleteCharAt(sBuilder.length() - 1);  
  65. // sBuilder.append(')');  
  66. //的System.out.println(sBuilder.toString());              
  67. //}  
  68. //  
  69. //的System.out.println(“----------开始方法列表----------”);  
  70. // / * $ Proxy0()  
  71. // $ Proxy0(InvocationHandler的,INT)* /  
  72. //方法[] =方法clazzProxy1.getMethods();  
  73. //为(方法方法:方法){  
  74. //字符串名称= method.getName();  
  75. // StringBuilder的sBuilder =新的StringBuilder(名称);  
  76. // sBuilder.append('(');  
  77. //类[] clazzParams = method.getParameterTypes();  
  78. //为(类clazzParam:clazzParams){  
  79. // sBuilder.append(clazzParam.getName())附加(“,”);  
  80. //}  
  81. 如果//(clazzParams!= NULL && clazzParams.length!= 0)  
  82. // sBuilder.deleteCharAt(sBuilder.length() - 1);  
  83. // sBuilder.append(')');  
  84. //的System.out.println(sBuilder.toString());              
  85. //}  
  86. //        
  87. //的System.out.println(“----------开始创建实例对象----------”);  
  88. // // obj对象= clazzProxy1.newInstance();  
  89. //构造器Constructor = clazzProxy1.getConstructor(InvocationHandler.class);  
  90. //类MyInvocationHander1实现InvocationHandler的{  
  91. //  
  92. //公共对象调用(对象的代理,方法的方法,对象[]参数)  
  93. //抛出的Throwable  
  94. // // TODO自动生成方法存根  
  95. //返回null;  
  96. //}  
  97. //        
  98. //}  
  99. //收集proxy1 =(集合)constructor.newInstance(新MyInvocationHander1());  
  100. //        
  101. //的System.out.println(proxy1);  
  102. // proxy1.clear();  
  103. // //proxy1.size();  
  104. // //System.out.println("111111111111111“);  
  105. //        
  106. //收集Proxy2将=(集合)constructor.newInstance(新的InvocationHandler(){  
  107. //  
  108. //公共对象调用(对象的代理,方法的方法,对象[]参数)  
  109. //抛出的Throwable  
  110. //返回null;  
  111. //}  
  112. //            
  113. //});  
  114.         //动态代理  
  115.         最终的 目标ArrayList的=   的ArrayList();             
  116.         收集Proxy3服务器=(集合)getProxy(目标, MyAdvice());  
  117.         proxy3.add(“ZXX” );  
  118.         proxy3.add(“LHM” );  
  119.         proxy3.add(“BXD” );  
  120.         //System.out.println(proxy3.size());  
  121.         。//System.out.println(proxy3.getClass()的getName());  
  122.  }  
  123. //把目标抽取成参数  
  124.     私人 静态 对象getProxy(最终 目标对象,最终的 咨询意见){  
  125.         反对Proxy3服务器= Proxy.newProxyInstance(  
  126.                 target.getClass()。getClassLoader(),  
  127.                 / *新的Class [] {} Collection.class,* /  
  128.                 target.getClass()。getInterfaces(),  
  129.                  的InvocationHandler(){  
  130.                     公共 对象调用(对象代理,方法的方法,对象[]参数)  
  131.                             抛出 的Throwable  
  132.                         advice.beforeMethod(法);  
  133.                         对象retVal的= method.invoke(目标参数);  
  134.                         advice.afterMethod(法);  
  135.                         返回 retVal的;                        
  136.                     }  
  137.                 }  
  138.                 );  
  139.         返回 Proxy3发出;  
  140.     }  
  141. }  
posted @ 2014-12-23 22:52  JAVA之迷  阅读(152)  评论(0编辑  收藏  举报