java中的代理
package cn.itcast.day3;
import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
 import java.util.ArrayList;
 import java.util.Collection;
public class ProxyTest {
/**
   * @param args
   */
  public static void main(String[] args) throws Exception {
   // TODO Auto-generated method stub
   Class clazzProxy1 = Proxy.getProxyClass(Collection.class.getClassLoader(), Collection.class);
   System.out.println(clazzProxy1.getName());
System.out.println("----------begin constructors list----------");
   /*
    * $Proxy0() $Proxy0(InvocationHandler,int)
    */
   Constructor[] constructors = clazzProxy1.getConstructors();
   for (Constructor constructor : constructors) {
    String name = constructor.getName();
    StringBuilder sBuilder = new StringBuilder(name);
    sBuilder.append('(');
    Class[] clazzParams = constructor.getParameterTypes();
    for (Class clazzParam : clazzParams) {
     sBuilder.append(clazzParam.getName()).append(',');
    }
    if (clazzParams != null && clazzParams.length != 0)
     sBuilder.deleteCharAt(sBuilder.length() - 1);
    sBuilder.append(')');
    System.out.println(sBuilder.toString());
   }
System.out.println("----------begin methods list----------");
   /*
    * $Proxy0() $Proxy0(InvocationHandler,int)
    */
   Method[] methods = clazzProxy1.getMethods();
   for (Method method : methods) {
    String name = method.getName();
    StringBuilder sBuilder = new StringBuilder(name);
    sBuilder.append('(');
    Class[] clazzParams = method.getParameterTypes();
    for (Class clazzParam : clazzParams) {
     sBuilder.append(clazzParam.getName()).append(',');
    }
    if (clazzParams != null && clazzParams.length != 0)
     sBuilder.deleteCharAt(sBuilder.length() - 1);
    sBuilder.append(')');
    System.out.println(sBuilder.toString());
   }
System.out.println("----------begin create instance object----------");
   // Object obj = clazzProxy1.newInstance();
   Constructor constructor = clazzProxy1.getConstructor(InvocationHandler.class);
   class MyInvocationHander1 implements InvocationHandler {
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
     // TODO Auto-generated method stub
     return null;
    }
}
   Collection proxy1 = (Collection) constructor.newInstance(new MyInvocationHander1());
System.out.println(proxy1);
   proxy1.clear();
   // proxy1.size();
   // System.out.println("111111111111111");
Collection proxy2 = (Collection) constructor.newInstance(new InvocationHandler() {
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
     return null;
    }
});
final ArrayList target = new ArrayList();
   Collection proxy3 = (Collection) getProxy(target, new MyAdvice());
   proxy3.add("zxx");
   proxy3.add("lhm");
   proxy3.add("bxd");
   System.out.println(proxy3.size());
   System.out.println(proxy3.getClass().getName());
  }
private static Object getProxy(final Object target, final Advice advice) {
   Object proxy3 = Proxy.newProxyInstance(target.getClass().getClassLoader(),
   /* new Class[]{Collection.class}, */
   target.getClass().getInterfaces(), new InvocationHandler() {
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
/*
      * long beginTime = System.currentTimeMillis(); Object retVal =
      * method.invoke(target, args); long endTime =
      * System.currentTimeMillis();
      * System.out.println(method.getName() + " running time of " +
      * (endTime - beginTime)); return retVal;
      */
advice.beforeMethod(method);
     Object retVal = method.invoke(target, args);
     advice.afterMethod(method);
     return retVal;
}
   });
   return proxy3;
  }
}
----------------------------------------------------------------------------
package cn.itcast.day3;
import java.lang.reflect.Method;
public interface Advice {
  void beforeMethod(Method method);
  void afterMethod(Method method);
 }
 ----------------------------------------------------------
package cn.itcast.day3;
import java.lang.reflect.Method;
public class MyAdvice implements Advice {
  long beginTime = 0;
public void afterMethod(Method method) {
   // TODO Auto-generated method stub
   System.out.println("调用方法后做的事!");  
   long endTime = System.currentTimeMillis();
   System.out.println(method.getName() + " running time of " + (endTime - beginTime));
}
public void beforeMethod(Method method) {
   // TODO Auto-generated method stub
   System.out.println("调用方法前做的事!");
   beginTime = System.currentTimeMillis();
  }
}
java中的代理的更多相关文章
- (转)轻松学,Java 中的代理模式及动态代理
		
背景:讲到反射机制,肯定会想到动态代理. 轻松学,Java 中的代理模式及动态代理 代理模式可以在不修改被代理对象的基础上,通过扩展代理类,进行一些功能的附加与增强.值得注意的是,代理类和被代理类应该 ...
 - java中Proxy(代理与动态代理)
		
转自: https://blog.csdn.net/pangqiandou/article/details/52964066 一.代理的概念 动态代理技术是整个java技术中最重要的一个技术,它是学习 ...
 - java中动态代理实现机制
		
前言: 代理模式是常用的java设计模式,它的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关系 ...
 - java中设置代理的两种方式
		
1 前言 有时候我们的程序中要提供可以使用代理访问网络,代理的方式包括http.https.ftp.socks代理.比如在IE浏览器设置代理. 那我们在我们的java程序中使用代理呢,有如下两种方式. ...
 - Java中的代理模式
		
代理模式在Java Web的框架中经常使用到.比如说在对数据库的访问中,核心功能是对数据库的增删改查,而连接数据库.处理事务等功能我们在开发中也要考虑到.所以我们将数据库的CRUD抽象到接口中,然后实 ...
 - 说说Java中的代理模式
		
今天看到传智播客李勇老师的JDBC系列的第36节——通过代理模式来保持用户关闭连接的习惯.讲的我彻底蒙蔽了,由于第一次接触代理模式,感到理解很难,在博客园找到一篇文章,先记录如下: 引用自java设计 ...
 - java中静态代理跟动态代理之间的区别
		
文章转载于:http://www.cnblogs.com/xiaoluo501395377/p/3383130.html 在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另 ...
 - java中动态代理
		
一.在java中怎样实现动态代理 1.我们要有一个接口,还要有一个接口的实现类,而这个实现类呢就是我们要代理的对象 接口: package org.dynamicproxy.test; public ...
 - JAVA中的代理技术(静态代理和动态代理)
		
最近看书,有两个地方提到了动态代理,一是在Head First中的代理模式,二是Spring AOP中的AOP.所以有必要补充一下动态代理的相关知识. Spring采用JDK动态代理和CGLib动态代 ...
 - 深入理解JAVA中的代理模式
		
前言 代理是什么 事故现场:我家的宠物今天生病了,而我又没有相关的医学知识,所以我只让我的宠物多喝热水吗? 结果显然是不行的,所以我需要去找宠物医生这些更专业的人来帮我的宠物治病. 这个时候,代理就出 ...
 
随机推荐
- 菜鸟学开店—最简收银POS系统
			
佳博打印机代理商淘宝店https://shop107172033.taobao.com/index.htm?spm=2013.1.w5002-9520741823.2.Sqz8Pf 在此店购买的打印机 ...
 - android SDK 代理配置(东北大学)
			
启动 Android SDK Manager ,打开主界面,依次选择「Tools」.「Options...」,弹出『Android SDK Manager - Settings』窗口: 在『Andro ...
 - Android Parcelable Trans byte[]
			
思路: http://stackoverflow.com/questions/10898116/make-custom-parcelable-containing-byte-array 谢谢, 这位外 ...
 - CAEmitterLayer
			
-(void)createFireworks{ CAEmitterLayer *fireworks = [CAEmitterLayer layer]; fireworks.emitterPositio ...
 - Java之webService知识
			
Java之webService知识 1 webservice基础知识 1.1 webService请求的本质 一次webService本质请求,如下所示: 1.2 wsdl文档解析 wsdl文档元素结 ...
 - java常用指令
			
javac 编译java源文件到字节码文件 -d XXX 1.指定编译后的字节码文件存放位置. 2.若编译的java源文件中使用包名,则根据包名生成相应的子目录 javac -d . Hello.ja ...
 - asp.net Handler中的IsReusable属性及在Handler中使用Session
			
大家在用HttpHandler的时候,一般都会有两个大的疑问(当然,前提是你有钻研精神的话,呵呵) 1. IsReusable到底什么意思? 老实说,这个属性很多人都感兴趣,但搞懂的人确实不多.MSD ...
 - Oracle数据库之PL/SQL包
			
Oracle数据库之PL/SQL包 1. 简介 包(PACKAGE)是一种数据对象,它是一组相关过程.函数.变量.常量和游标等PL/SQL程序设计元素的组合,作为一个完整的单元存储在数据库中,用名称来 ...
 - 更换Python默认软件镜像源
			
限于一些众所周知的原因,在我们pip安装软件的时候出现类似报错: data = self.read(amt=amt, decode_content=decode_content) File " ...
 - Linux 环境下自动化测试工具,Redhat dogtail的安装
			
dogtail基于Accessibility(a11y)的GUI图形界面测试工具和自动化框架可以与linux桌面应用程序进行交互操作. dogtail是用Python语言写的.dogtail的测试脚本 ...