1、北京传智播客教育 ,动态代理,王健,北京传智播客教育 ,动态代理:,明确以下概念: 代理人是谁? Proxy ,InvocationHandler 要代理谁? Object 代理了以后做什么?拦截Object的方法。,北京传智播客教育 ,使用动态代理开的步骤1:,北京传智播客教育 ,动态代理2代理任意类:,北京传智播客教育 ,使用范型:,北京传智播客教育 ,动态代理Request对像实现编码转换:,北京传智播客教育 ,使用动态代理实现压缩的输出流:,北京传智播客教育 ,用动态代理管理我们的连接池:,北京传智播客教育 ,类加载器了解:,类加载器负责将.class文件加载到内存中,并负责为之生成对
2、应的Class对像。 JVM在启动时,会形成由三个类加载器组合而成的初始类加载器层将结构。,北京传智播客教育 ,类加载器层次图:,BootStrap,ExtClassLoader,AppClassLoader,JAVA_HOME/jre/lib/rt.jar,JAVA_HOME/jre/lib/ext/*.jar,项目CLASSPATH中的jar,自定义类装载器实现ClassLoader,北京传智播客教育 ,北京传智播客教育 ,BootStrap ClassLoader,此类负责加载JVM的核心类,通常被称之为引导或原始类装载器。 这个类非常特殊,它实际是不是ClassLoader的子类。而是
3、由SUN公司自己定制的专用类。 可以通过以下方法查看BootStrap加载了哪些类(包),北京传智播客教育 ,ExtClassLoader类:,此类被称为扩展类加载器。 它负责加载jre/lib/ext目录下的所有类。 所以,当有扩展类需要加入到JVM时,建议将扩展类放到ext目录下,JVM会自动为你加载它们。,北京传智播客教育 ,AppClassLoader:,此类负责加载用户项目CLASSPATH中的类。 也称之为系统类,或应用类加载器。 可以通过以下方法直接获取此类: ClassLoader.getSystemClassLoader(),北京传智播客教育 ,类加载器的父类委托机制:,类加
4、载器,使用父类委托机制。 父类委托机制是指,先由parent(父)类装载器去装载需要加载的类,如果父类找不到再由子类的装载器加载。类装载器还使用了Cache(缓存)机制,如果缓存中有这个Class则直接返回它,如果没有,则从文件中读取并转换成Class对像,同时再将它Cache起来。这样做的目的是保证Class对像只被装载一次。这也就是为什么在修改了Java代码后,必须重新启动才会生效的原因。,北京传智播客教育 ,类加载器的父类委托机制-的实验步骤:,第一步:在你的项目下书一个类,如Demo.java。重写toString方法。 第二步:将此类打包后放到jre/lib/ext目录下。 第三步:在你的项目中,保存原有的Demo.java。并修改toString方法的返回值。 第四步:书写一个新类,在此类的main方法中,实例化Demo类。 第五步:查看它的类装载器是谁,调用它的toString方法,看输出的结果是什么?,