动态代理的学习总结

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

 

    看完了张孝祥老师的基础加强篇,发觉后面的动态代理知识相对抽象一时还不能完全理解,所以查找了很多资料,在此整理一下自己的收获,总结对动态代理的理解。
     开篇还是拿张老师经典的例子买电脑来说明,正常情况下我们有两种方法可以买到电脑,要么找代理商,要么找总部,虽然总部的电脑会便宜,但算上路费可能就贵了,所以招代理应该是最划算的;显然代理类可以代替实际类大部分的功能,是客户端与目标对象之间的桥梁,甚至使一些目标对象不便完成的任务做的很完美,代理类可以使客户不具备访问目标对象的某些数据,提高安全性。
     java从jdk1.3开始引入动态代理类的概念,动态代理可以提高代码额可复用性,多不同的类需要实现相同的功能,不必在每个类里面都写上相同的代码,通过一个动态的代理类就会方便很多,提高编程效率,这样若是后期想改变代码也会很方便。代理模式是生成和目标类相同接口的代理类,用户通过使用代理类来封装某个实现类,动态代理中的代理类由java.lang.reflect.Proxy类在运行时由接口定义,采用java反射功能动态生成。与java.lang.reflect.InvocationHandler结合,加强现有类的实现,通过自定义Hander重写invoke方法实现InvocationHandler接口,该方法可以利用反射机制实现特定功能,自定义Hander实例化时,将实现类传入Hander对象
    
import java.lang.reflect.Method;

public interface Advice {
 public void beforMethod();
 public void endMethod(Method method);
}


public class Myadvice implements Advice {
 long startTime;
 public void beforMethod() {
  startTime=System.currentTimeMillis(); 
 }
 public void endMethod(Method method) {
        long endTime=System.currentTimeMillis();
        System.out.println(method.getName() + "方法运行时间:" + (endTime - startTime)+ "毫秒");
 }
}

public class ProxyDemo {
        public static void main(String[] args)throws Exception {
     final ArrayList target=new ArrayList();
            Collection col=(Collection)Proxy.newProxyInstance(
  target.getClass().getClassLoader(),
                target.getClass().getInterfaces(),
                new InvocationHandler(){
      public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {
    advice.beforMethod();
    System.out.println(Thread.currentThread());
    Thread.currentThread().sleep(100);
    Object retVal=method.invoke(target, args);
    advice.endMethod(method);
    return retVal;
     }});
  col.add("123");
  col.add("234");
  System.out.println(col.size());
 }
}
      以上的代码只体现了代理类的实现方式,目标类通过代理控制这个对象的访问,说白了就是在特定情况下让客户看不到目标类的一些类容和服务,同时代理类也可以提供额外的服务,比如买电脑,电脑厂家值提供电脑,而代理上也可以通过送鼠标垫的方式吸引客户。
      其实代理类的知识远不止如此,需要学的还有很多,继续努力!

----------------------- android培训java培训、java学习型技术博客、期待与您交流! ----------------------

详情请查看:http://edu.csdn.net/heima

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值