zoukankan      html  css  js  c++  java
  • 关于动态代理的一些理解

    动态代理:

               特征:

                           字节码随用随创建,随用随加载

               作用:

                           不修改源码的基础上,对已有方法进行加强

                 优势:

                          去除重复代码,对重复代码进行统一管理和调配

                            取出重复代码:

                                                      可以提高开发效率

                                                       降低代码间的依赖关系

                                                       降低代码的维护成本

    分类:

               基于接口的动态代理:

                    提供者:JDK官方

                     使用要求:被代理对象至少实现一个接口

                  创建代理对象的类:Proxy

                 创建代理对象的方法:newProxyInstance()

               创建代理对象方法的三个参数(由于jdk检查非常严格,所有在代理被代理对象时,需要具备与被代理对象有一样的特征才能瞒过jdk的检查):

                                           ClassLoader :类加载器

                                                                需要有和被代理对象一样的类加载器

                                                                例如:被代理对象为User 则加载器为User.class.getClassLoader()

                                                               注意:类加载器不是写谁都行!

                                                                            java有三个加载器:java是通过层层加载的(父类加载委托机制:当加载时都要判断父类是否加载,如果父类已经加载,则子类不加载,反之,父类没有加载,则子类才进行加载

                                                                                第一个:Bootstrap:

                                                                                              它是嵌套在java虚拟机中的二进制程序,负责加载jdk中的rt,.jar,tools.jar等

                                                                                第二个:ExClassLoader

                                                                                                 它只负责加载jdk中扩展目录的字节码

                                                                                                java目录下的jrelibext

                                                                                第三个:AppClassLoader

                                                                                             它负责加载我们自己写的类的字节码,还包括我们导入的lib的字节码

                                                                       

         

                                               Class[] : 字节码数组

                                                                让被代理对象和代理对象具有相同的行为(方法)

                                                                  和被代理对象实现相同的接口即可。

                                                                如对象为普通类User 则 User.getClass().getInterfaces();

                                                                如果被代理的是一个接口:

                                                                如对象为UserDao 则: new Class[  ]{UserDao.class}

                                           InvocationHadler:提供增强代码的接口。谁用谁来写一个该接口的实现类,通常写的是匿名内部类

               基于子类的代理对象:

                                  提供者:第三方cglib

                                  使用要求:被代理类不能使最终类。不能被final修饰

                                  创建代理对象的类:Enhancer

                                  创建代理对象的方法:create();

                                  创建代理对象方法的参数:

                                                      Class

                                                      Callback:它里面没有方法,我们用的是它的子接口MethodInterceptor

                                                      

                                                     

  • 相关阅读:
    AS快捷键的设置
    hausaufgabe--python 23- Recurse 2
    hausaufgabe--python 22- Recurse
    hausaufgabe--python 21_ Lambda
    hausaufgabe--python 20-Closure functions 2
    hausaufgabe--python 20- usage of Closure
    hausaufgabe--python 19- Functions 2
    hausaufgabe--python 18- Defined specific Functions
    hausaufgabe--python 17- Function definition
    hausaufgabe--python 16- Sequenz
  • 原文地址:https://www.cnblogs.com/create-and-orange/p/11017912.html
Copyright © 2011-2022 走看看