【重学Java】(三)静态代理与动态代理
1.静态代理
静态代理是典型的代理模式的模版代码,代码结构如图:
具体实现:被代理类和代理类实现同一接口,在代理类中持有被代理对象的引用,外界调用时,操作代理对象即可操作被代理对象。由于代理的存在,还可以在操作前后加入额外的逻辑。
如果目标类是第三方的代码,也可以采用继承的方式做代理
2.动态代理
(1)动态代理只能代理接口。因为动态代理生成的proxy代理类,都是继承自系统的Proxy,Java中只有单继承。
(2)动态代理的典型特征:
1.对于InvocationHandler的使用,其invoke方法即反射调用,可以在调用前后加入其它逻辑
2.Proxy.newProxyInstance是返回了一个接口的实例,或者说接口实现类的实例
(3)代理对象的创建本质上也是通过反射创建
(4)应用场景:一般配合注解或反射,帮助生成模版代码