• 动态代理


    动态代理(理解即可);基于反射机制
    掌握的程度;1.知道什么是动态代理?  2.知道动态代理能做什么?可以在不改变原来目标方法的前提下,可以在代理中增强自己的功能代理,在程序开发中的意义,比如,你所在的项目中是其他人(公司小组其他人)写好的,但是不能完全满足自己的项目,需要自己增加代码,这时用代理实现;实现了功能增强,而且还进行了功能增强;

    1.代理
        代购,中介,商家等等
        比如有一家美国大学,可以对全世界招生,留学中介(代理)
        代理特点:
            1.中介和代理他们要做的事情是一致的,招生
            2.中介是学校代理,学校是目标
            3.家长--中介(学校介绍,办理入学手续)--美国学校
            4.中介是代理,不能白干活,需要收取费用
            
        为什么要找中介?
        1.中介是专业的,方便
        2.家长现在不能自己去找学校,家长没有能力访问学校,或者美国学校不接受个人来访
        
        买东西都是商家卖,商家是某个商品的代理,你个人买东西,肯定不会让你接触到厂家

     在开发中也有这样的情况,你有a类,本来是调用c类方法,完成某个功能,但是c类不能调用,这时我们创建一个b代理,c让b访问,a就可以访问b,b访问c

        实际的例子中,登录,注册有验证码,验证码是手机短信,但是只有中国移动,联通或者电信公司能发短信,这些公司有子公司,他们面向社会提供短信发送功能;
    张三项目发送短信--子公司--中国移动,联通或者电信(代理模式)

        使用代理模式的作用
        1.功能增强,在原有的功能上增加额外的功能
        2.控制访问,代理类不让你访问目标,例如商家不让你访问厂家
        实现代理的方式
        1.静态代理:代理类是自己手工实现,自己创建一个Java类表示代理类,同时你所要的目标类是确定的,特点:实现简单,容易理解
    缺点;当目标类增加了,代理类可能也需要成倍增加,当接口方法增多,会影响很多实现类,厂家和商家都需要修改
        模拟用户购买u盘,用户是客户端类,商家是代理,厂家是目标类; 三者关系:用户(客户端)--商家(代理)--厂家(目标)
        商家和厂家的功能是一致的,都是卖u盘
        实现步骤:
        1.创建一个接口来定义卖U盘的方法,表示厂家和商家要做的事情;
        2.创建厂家类,实现接口
        3.创建商家,实现接口
        4.创建客户端类,调用商家的方法买U盘

        2.动态代理(重点):在程序执行过程中,使用JDK的反射机制,创建代理类对象,并动态的指定目标类;换句话说,动态代理是一种创建Java对象的能力,让你不用创建类,也能创建对象;
            在静态代理中目标类很多时,可以使用动态代理,避免静态代理的缺点,动态代理中目标类即使很多,代理类数量可以很少,当你修改了接口的方法,不会影响代理类

        动态代理:1.JDK动态代理(理解):使用Java反射包中的类和接口实现动态代理的功能
        2.cglib动态代理(了解):它是第三方的工具库,创建代理对象,原理是继承,它通过继承目标类,创建它的子类,在子类中重写父类中同名的方法,实现功能的修改,它要求目标类不能是final,对目标类要求低,只需要能继承就可以了, 在很多框架中使用(Spring,mybatis)    
        
        JDK动态代理:
            1.反射,Method类,类中的方法,通过Method可以执行某个方法。
            2.JDK动态代理实现:反射包:Java.lang.reflect 里面有三个类,InvocationHandle,Method,Proxy
        1)InvocationHandle接口:就一个方法invoke(),表示代理对象要执行的功能代码,你的代码类要完成的功能就写在这个方法中
        代理类要完成的功能;1.调用目标方法,执行目标方法的功能 2.功能增强,在目标方法调用时,增强功能;

        InvocationHandle接口:表示你的代理要做什么
    怎么用;1.创建类实现接口InvocationHandle  2.重写invoke方法,把原来静态代理中代理类要完成的功能写在这里

        Method类:表示方法的,确切的说是目标类中的方法
    作用:通过Method可以执行某个目标类的方法

        Proxy类:核心的对象,创建代理对象,之前创建对象都是new类个构造方法,现在使用Proxy类的方法,代替new的使用

    方法  静态方法  newProxyinstance() 创建代理对象,

  • 相关阅读:
    [转]Android Permission(授权)大全
    ubuntu改中文
    [转]dip, dp, px, sp区别
    【转】关于Android4.0 emulatorarm.exe应用程序错误,内存不能为"read"问题解决方法
    SharedPreferences 的用法
    [转]深入研究java.lang.ThreadLocal类
    [转]Android 中Parcelable的作用
    HierarchyView
    使用Silverlight Toolkit中的主题(Theme)
    Split参数StringSplitOptions.RemoveEmptyEntries的使用
  • 原文地址:https://www.cnblogs.com/1877chl/p/13341341.html
Copyright © 2020-2023  润新知