正经人z
菜鸟一个!

动态代理(理解即可);基于反射机制
掌握的程度;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() 创建代理对象,

posted on 2020-07-19 21:33  正经人z  阅读(102)  评论(0编辑  收藏  举报