A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

动态代理
        概述
                适用场景——编译时无法确定需要实现哪个接口时才有必要使用
                使用原理
                        1.在程序处于运行状态时,动态创建一个新类(实现被增强类实现的所有接口),并获得该类的对象(即动态对象)
                        2.无论何时调用代理对象的方法,调用代理器的invoke方法都会被调用,并向其传递Method对象和原始的调用参数。
                使用原因
                        路由对远程服务器的方法调用
                        在程序运行期间,将用户接口事件与动作进行关联
                        为调试,跟踪方法调用
                代理的企业应用
                        Spring的AOP底层使用的就是代理机制(AOP面向切面编程)
        Proxy对象
                static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)
          返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序。
                ClassLoader loader——类加载器
                        作为Java安全模型的一部分,对于系统类和从因特网下载的类,可以使用不同的类加载器
                        Class类
ClassLoader getClassLoader()
          返回该类的类加载器。
                Class<?>[] interfaces——被增强类的所有接口
                        Class类
Class<?>[] getInterfaces()
          确定此对象所表示的类或接口实现的接口。
                InvocationHandler h——处理类
                        InvocationHandler接口
Object invoke(Object proxy, Method method, Object[] args)
          在代理实例上处理方法调用并返回结果。
                        Method类
Object invoke(Object obj, Object... args)
          对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。
        类加载器
                作用——将.class文件加载到JVM中,得到字节码文件
                分类
                        引导类加载器
                                JDK(JAVA_HOME/jre/lib/rt.jar)
                                JVM的一部分(JVM是用C语言编写的)
                        扩展类加载器
                                JDK(JAVA_HOME/jre/lib/exe/*.jar)
                        应用类加载器
                                类路径下的所有class(自定义)
                保证类只被加载一次不被重复加载
                        类加载器的全盘委托机制
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马