春天动态代理
- 包 cn.itcast.day3;
- 进口 java.lang.reflect.Method中;
- 公共 接口 忠告{
- 无效 beforeMethod(方法方法);
- 无效 afterMethod(方法方法);
- }
- 包 cn.itcast.day3;
- 进口 java.lang.reflect.Method中;
- 公共 类 MyAdvice 实现 咨询{
- 长 BEGINTIME = 0 ;
- 公共 无效 afterMethod(方法方法){
- // TODO自动生成方法存根
- 的System.out.println( “ 从传智播客毕业上班啦!” );
- 长 endTime的= System.currentTimeMillis的();
- 的System.out.println(method.getName()+ “运行时间” +(endTime的- BEGINTIME));
- }
- 公共 无效 beforeMethod(方法方法){
- // TODO自动生成方法存根
- 的System.out.println( “ 到传智播客来学习啦!” );
- BEGINTIME = System.currentTimeMillis的();
- }
- }
- 包 cn.itcast.day3;
- 进口 java.lang.reflect.Constructor中;
- 进口 java.lang.reflect.InvocationHandler;
- 进口 java.lang.reflect.Method中;
- 进口 java.lang.reflect.Proxy;
- 进口 的java.util.ArrayList;
- 进口 java.util.Collection的;
- 公共 类 ProxyTest {
- / **
- * @参数的args
- * /
- @SuppressWarnings (“选中” )
- 公共 静态 无效 的主要(字串[] args){
- //类clazzProxy1 = Proxy.getProxyClass(Collection.class.getClassLoader(),Collection.class);
- //的System.out.println(clazzProxy1.getName());
- //
- //的System.out.println(“----------开始构造函数列表----------”);
- // / * $ Proxy0()
- // $ Proxy0(InvocationHandler的,INT)* /
- //构造[] =构造clazzProxy1.getConstructors();
- //为(构造器Constructor:构造函数){
- //字符串名称= constructor.getName();
- // StringBuilder的sBuilder =新的StringBuilder(名称);
- // sBuilder.append('(');
- //类[] clazzParams = constructor.getParameterTypes();
- //为(类clazzParam:clazzParams){
- // sBuilder.append(clazzParam.getName())附加(“,”);
- //}
- 如果//(clazzParams!= NULL && clazzParams.length!= 0)
- // sBuilder.deleteCharAt(sBuilder.length() - 1);
- // sBuilder.append(')');
- //的System.out.println(sBuilder.toString());
- //}
- //
- //的System.out.println(“----------开始方法列表----------”);
- // / * $ Proxy0()
- // $ Proxy0(InvocationHandler的,INT)* /
- //方法[] =方法clazzProxy1.getMethods();
- //为(方法方法:方法){
- //字符串名称= method.getName();
- // StringBuilder的sBuilder =新的StringBuilder(名称);
- // sBuilder.append('(');
- //类[] clazzParams = method.getParameterTypes();
- //为(类clazzParam:clazzParams){
- // sBuilder.append(clazzParam.getName())附加(“,”);
- //}
- 如果//(clazzParams!= NULL && clazzParams.length!= 0)
- // sBuilder.deleteCharAt(sBuilder.length() - 1);
- // sBuilder.append(')');
- //的System.out.println(sBuilder.toString());
- //}
- //
- //的System.out.println(“----------开始创建实例对象----------”);
- // // obj对象= clazzProxy1.newInstance();
- //构造器Constructor = clazzProxy1.getConstructor(InvocationHandler.class);
- //类MyInvocationHander1实现InvocationHandler的{
- //
- //公共对象调用(对象的代理,方法的方法,对象[]参数)
- //抛出的Throwable
- // // TODO自动生成方法存根
- //返回null;
- //}
- //
- //}
- //收集proxy1 =(集合)constructor.newInstance(新MyInvocationHander1());
- //
- //的System.out.println(proxy1);
- // proxy1.clear();
- // //proxy1.size();
- // //System.out.println("111111111111111“);
- //
- //收集Proxy2将=(集合)constructor.newInstance(新的InvocationHandler(){
- //
- //公共对象调用(对象的代理,方法的方法,对象[]参数)
- //抛出的Throwable
- //返回null;
- //}
- //
- //});
- //动态代理
- 最终的 目标ArrayList的= 新 的ArrayList();
- 收集Proxy3服务器=(集合)getProxy(目标,新 MyAdvice());
- proxy3.add(“ZXX” );
- proxy3.add(“LHM” );
- proxy3.add(“BXD” );
- //System.out.println(proxy3.size());
- 。//System.out.println(proxy3.getClass()的getName());
- }
- //把目标抽取成参数
- 私人 静态 对象getProxy(最终 目标对象,最终的 咨询意见){
- 反对Proxy3服务器= Proxy.newProxyInstance(
- target.getClass()。getClassLoader(),
- / *新的Class [] {} Collection.class,* /
- target.getClass()。getInterfaces(),
- 新 的InvocationHandler(){
- 公共 对象调用(对象代理,方法的方法,对象[]参数)
- 抛出 的Throwable
- advice.beforeMethod(法);
- 对象retVal的= method.invoke(目标参数);
- advice.afterMethod(法);
- 返回 retVal的;
- }
- }
- );
- 返回 Proxy3发出;
- }
- }