在了解动态代理之前,我们首先需要介绍一下静态代理。简单来说,代理就是用一个代理类来封装一个委托类。
代理的好处:
可以隐藏委托类的具体实现;
可以在不改变委托类的情况下增加额外的操作。
静态代理:就是在程序运行之前,代理类就已经存在了。
静态代理一般的实现方式为:委托类和代理类都实现同一个接口或者是继承自同一个父类,然后在代理类中保存一个委托类的对象引用(父类或者父类接口的对象引用),通过给构造器传入委托类的对象进行初始化,在同名方法中通过调用委托类的方法实现静态代理
静态代理通常用于对原有业务逻辑的扩充。比如持有二方包的某个类,并调用了其中的某些方法。然后出于某种原因,比如记录日志、打印方法执行时间,但是又不好将这些逻辑写入二方包的方法里。所以可以创建一个代理类实现和二方方法相同的方法,通过让代理类持有真实对象,然后在原代码中调用代理类方法,来达到添加我们需要业务逻辑的目的。
这其实也就是代理模式的一种实现,通过对真实对象的封装,来实现扩展性。
一个典型的代理模式通常有三个角色,这里称之为**代理三要素**
1.共同的接口
2.被代理类
3.代理类
让土豪测试一下: