• 春天动态代理


    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. }  
  • 相关阅读:
    全栈项目搭建 ------- express
    全栈项目搭建 ------- mysql
    全栈项目搭建 ------- pm2
    基于mysql+node+vue-ssr+webpack全栈项目搭建
    前端技能2020
    项目线上地址汇总2020
    实现一个脚手架
    下载漏洞
    java学习笔记(13-接口、final、多态)
    java学习笔记(12-继承、抽象类)
  • 原文地址:https://www.cnblogs.com/baiduligang/p/4246987.html
Copyright © 2020-2023  润新知