静态代理和动态代理样例

一、什么是代理

所谓代理,其实就是扮演了一个中间人的角色 。打个比方买火车票,12306的app就是一个代理,代理了火车站售票窗口的功能。小区当中的代售点也是代理,黄牛也是代理。他们替你买了,你就不需要去火车站售票窗口了,就相当于增强了售票窗口的功能。

二、代理的分类

代理分为静态代理和动态代理,其中动态代理又分为jdk动态代理和cglib动态代理。

三、代理的应用

1、静态代理

定义接口Singer

定义类Cai实现接口

静态代理和动态代理样例_第1张图片

定义代理类

静态代理和动态代理样例_第2张图片

主方法以及运行结果

静态代理和动态代理样例_第3张图片

静态代理和动态代理样例_第4张图片

2、jdk动态代理

定义接口Singer

静态代理和动态代理样例_第5张图片

定义类Cai实现接口

静态代理和动态代理样例_第6张图片

定义规则Rule实现接口InvocationHandler,重写invoke方法

静态代理和动态代理样例_第7张图片

运行结果

静态代理和动态代理样例_第8张图片

3、cglib动态代理

定义类Singer

静态代理和动态代理样例_第9张图片

定义一个子类SingerSub继承父类Singer

静态代理和动态代理样例_第10张图片

主方法以及运行结果

静态代理和动态代理样例_第11张图片

静态代理和动态代理样例_第12张图片

四、总结

代理主要目的是为了在不需要修改代码的情况下就能够增强代码功能。然后才是增强安全性,增加扩展度,灵活度等等。但是如果在需求不确定的情况下,使用静态代理将会造成毁灭性的编码灾难。因为一旦开始构建需求,就会构建对应的类。一旦类产生了,就会因为需求的改变,演变成新的类,进而引起类爆炸。为了解决这个问题,码农的前辈们就整出了动态代理,jdk动态代理和cglib动态代理的区别在于有没有接口,有接口的是jdk动态代理,没有接口的是cglib动态代理。
 

你可能感兴趣的:(java,开发语言)