一、什么是代理
所谓代理,其实就是扮演了一个中间人的角色 。打个比方买火车票,12306的app就是一个代理,代理了火车站售票窗口的功能。小区当中的代售点也是代理,黄牛也是代理。他们替你买了,你就不需要去火车站售票窗口了,就相当于增强了售票窗口的功能。
二、代理的分类
代理分为静态代理和动态代理,其中动态代理又分为jdk动态代理和cglib动态代理。
三、代理的应用
1、静态代理
定义接口Singer
定义类Cai实现接口
定义代理类
主方法以及运行结果
2、jdk动态代理
定义接口Singer
定义类Cai实现接口
定义规则Rule实现接口InvocationHandler,重写invoke方法
运行结果
3、cglib动态代理
定义类Singer
定义一个子类SingerSub继承父类Singer
主方法以及运行结果
四、总结
代理主要目的是为了在不需要修改代码的情况下就能够增强代码功能。然后才是增强安全性,增加扩展度,灵活度等等。但是如果在需求不确定的情况下,使用静态代理将会造成毁灭性的编码灾难。因为一旦开始构建需求,就会构建对应的类。一旦类产生了,就会因为需求的改变,演变成新的类,进而引起类爆炸。为了解决这个问题,码农的前辈们就整出了动态代理,jdk动态代理和cglib动态代理的区别在于有没有接口,有接口的是jdk动态代理,没有接口的是cglib动态代理。
?