學習筆記-設計模式入門基礎篇-代理模式

代理模式

代理角色,被代理的角色(目標對象),由被代理角色來做最終的決定

代理角色通常來說會持有被代理角色對象的引用

獲取到目標對象的引用,並且能夠調用到目標類的業務方法

 

靜態代理

代理類:獲取目標類的引用(具體的類的引用)

目標類:做決定的方法(具體的類);做決定的方法;

代理類

目標類

動態代理

動態代理類:獲取目標類的引用(可以是個接口)

目標類:實現接口的類

代理類需要實現 InvocationHandler 類,並實現 invoke方法,方法增強也就是在這個invoke方法裏面做;

代理類可以是接口,也可以是普通的類

調用

區別

靜態代理,在代理之前,所有的東西都是已知的

動態代理,在代理之前,所有的東西都是未知的

 

Cglib

目標類:普通的類

代理類: implements MethodInterceptor 接口 Override intercept方法

Jdk 中,一般$ 符號開頭的類都是自動生成的

 

目標類

代理類

調用:

字節碼重組:

  1. 拿到被代理對象的引用,並且獲取到它的所有的接口,反射獲取
  2. JDK Proxy 類重新生成一個新的類、同時新的類要實現被代理類的所有實現的所有接口
  3. 動態生成java代碼,把新加的業務邏輯方法由一定的邏輯代碼去調用(代碼中體現)
  4. 編譯生成新的JAVA代碼.class;
  5. 在重新加載到jvm 中運行;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章