动态代理的学习总结

原创 2012年03月25日 00:19:43

----------- 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

黑马程序员 (高新技术)  动态代理学习总结

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! --------------------- -----...

学习动态代理的总结

这两天好好研究了动态代理,把一些体会写出来,以备后用 代理分为静态代理和动态代理 静态代理需要手动为每个代理类的每个方法添加要实现的功能(如日志) 而动态代理则为需要添加功能的类自动生成代理...
  • zzu_sun
  • zzu_sun
  • 2011年11月06日 11:24
  • 219

Java反射学习总结四(动态代理使用实例和内部原理解析)

动态代理就是应用两个类来实现的

Mybatis学习总结(二).Mybatis普通方式实现CRUD及动态代理方式实现CRUD

普通方式实现CRUD user.java public class User { private Long id; // 用户名 private S...

java的动态代理学习总结

1,摘要        Java动态代理是java的一个重要的概念.虽然其默默无闻,不被初学者所熟知,但其如同Java反射机制一样,使java丰富多彩.         首先,为什么我们需要jav...
  • mamy010
  • mamy010
  • 2012年04月22日 20:11
  • 622

反射和动态代理之Java学习总结

反射和动态代理 类型信息 运行时类型信息使得你可以在程序运行时发现和使用类型信息,它在运行时是通过Class对象表示的,为了生成这个类对象,JVM将使用“类加载器”子系统,当程序创建第一个对类的静...

Java动态代理学习测试类

  • 2017年04月22日 20:45
  • 4KB
  • 下载

jdk动态代理学习笔记

  • 2013年03月06日 11:10
  • 82KB
  • 下载

Spring学习总结(二)——静态代理、JDK与CGLIB动态代理、AOP+IoC

一、为什么需要代理模式 假设需实现一个计算的类Math、完成加、减、乘、除功能,如下所示: 1 package com.zhangguo.Spring041.aop01; 2 3 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:动态代理的学习总结
举报原因:
原因补充:

(最多只允许输入30个字)