1.靜態代理
靜態代理是典型的代理模式的模版代碼,代碼結構如圖:
具體實現:被代理類和代理類實現同一接口,在代理類中持有被代理對象的引用,外界調用時,操作代理對象即可操作被代理對象。由於代理的存在,還可以在操作前後加入額外的邏輯。
如果目標類是第三方的代碼,也可以採用繼承的方式做代理
2.動態代理
(1)動態代理只能代理接口。因爲動態代理生成的proxy代理類,都是繼承自系統的Proxy,Java中只有單繼承。
(2)動態代理的典型特徵:
1.對於InvocationHandler的使用,其invoke方法即反射調用,可以在調用前後加入其它邏輯
2.Proxy.newProxyInstance是返回了一個接口的實例,或者說接口實現類的實例
(3)代理對象的創建本質上也是通過反射創建
(4)應用場景:一般配合註解或反射,幫助生成模版代碼