最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java 中動態(tài)代理詳解及實例

 更新時間:2017年06月05日 09:05:57   投稿:lqh  
這篇文章主要介紹了java 中動態(tài)代理詳解及實例的相關資料,需要的朋友可以參考下

Java動態(tài)代理相關

先來看靜態(tài)代理模式代碼:

package test; 
 
public interface Subject 
{ 
 public void doSomething(); 
} 

package test; 
public class RealSubject implements Subject{ 
 public void doSomething() { 
 System.out.println( "call doSomething()" ); 
 } 
} 

package test; 
public class SubjectProxy implements Subject { 
 Subject subimpl = new RealSubject(); 
 public void doSomething() { 
 subimpl.doSomething(); 
 } 
} 
package test; 
public class TestProxy { 
 public static void main(String args[]) { 
 Subject sub = new SubjectProxy();  
 sub.doSomething(); 
 } 
} 

剛開始我會覺得SubjectProxy定義出來純屬多余,直接實例化實現(xiàn)類完成操作不就結(jié)了嗎?后來隨著業(yè)務龐大,你就會知道,實現(xiàn)proxy類對真實類的封裝對于粒度的控制有著重要的意義。但是靜態(tài)代理這個模式本身有個大問題,如果類方法數(shù)量越來越多的時候,代理類的代碼量是十分龐大的。所以引入動態(tài)代理來解決此類問題。

先看代碼:

package test; 
 
public interface Subject 
{ 
 public void doSomething(); 
} 
package test; 
public class RealSubject implements Subject { 
 public void doSomething() { 
 System.out.println( "call doSomething()" ); 
 } 
} 
package test; 
import java.lang.reflect.InvocationHandler; 
import java.lang.reflect.Method; 
import java.lang.reflect.Proxy; 
public class ProxyHandler implements InvocationHandler { 
 private Object tar; //綁定委托對象,并返回代理類 
 public Object bind(Object tar) { 
 this.tar = tar; //綁定該類實現(xiàn)的所有接口,取得代理類 
 return Proxy.newProxyInstance(tar.getClass().getClassLoader(), tar.getClass().getInterfaces(), this); 
 } 
 public Object invoke(Object proxy , Method method , Object[] args)throws Throwable { 
 Object result = null; 
 //這里就可以進行所謂的AOP編程了 
 //在調(diào)用具體函數(shù)方法前,執(zhí)行功能處理 
 result = method.invoke(tar,args); 
 //在調(diào)用具體函數(shù)方法后,執(zhí)行功能處理 
 return result; 
 } 
} 
public class TestProxy { 
public static void main(String args[]) { 
 ProxyHandler proxy = new ProxyHandler(); //綁定該類實現(xiàn)的所有接口 
 Subject sub = (Subject) proxy.bind(new RealSubject()); 
 sub.doSomething(); 
 } 
} 

看完代碼,現(xiàn)在我來回答,動態(tài)代理的作用是什么:

Proxy類的代碼量被固定下來,不會因為業(yè)務的逐漸龐大而龐大;

可以實現(xiàn)AOP編程,實際上靜態(tài)代理也可以實現(xiàn),總的來說,AOP可以算作是代理模式的一個典型應用;

解耦,通過參數(shù)就可以判斷真實類,不需要事先實例化,更加靈活多變。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

  • Java中四種訪問控制權(quán)限解析(private、default、protected、public)

    Java中四種訪問控制權(quán)限解析(private、default、protected、public)

    java當中有4種訪問修飾限定符privat、default(默認訪問權(quán)限),protected以及public,本文就詳細的介紹一下這四種方法的具體使用,感興趣的可以了解一下
    2023-05-05
  • SpringSecurity報錯authenticationManager must be spec的解決

    SpringSecurity報錯authenticationManager must be 

    這篇文章主要介紹了SpringSecurity報錯authenticationManager must be spec的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • SpringBoot項目如何訪問jsp頁面的示例代碼

    SpringBoot項目如何訪問jsp頁面的示例代碼

    本篇文章主要介紹了SpringBoot項目如何訪問jsp頁面的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • java中怎么將多個音頻文件拼接合成一個

    java中怎么將多個音頻文件拼接合成一個

    在Java中,將多個音頻文件拼接成一個通常需要使用一些專門的音頻處理庫,因為Java標準庫并不直接支持音頻文件的合并,一個常用的庫是JAVE2(Java?Audio?Video?Encoder)或JLayer(用于MP3)結(jié)合JavaFX(如果用于簡單的WAV文件)或其他類似的庫
    2024-06-06
  • Java?NIO下ByteBuffer的常用方法學習

    Java?NIO下ByteBuffer的常用方法學習

    這篇文章主要帶大家來初步學習一下NIO?中的?ByteBuffer的應用與常用方法,文中的示例代碼講解詳細,對我們深入學習Java有一定的幫助,感興趣的可以了解一下
    2023-05-05
  • 關于springboot配置druid數(shù)據(jù)源不生效問題(踩坑記)

    關于springboot配置druid數(shù)據(jù)源不生效問題(踩坑記)

    今天日常跟著網(wǎng)課學習,學到了整合druid數(shù)據(jù)源,遇到了好幾個坑,希望這篇文章可以幫助一些和我一樣踩坑的人
    2021-09-09
  • 詳解基于Spring Data的領域事件發(fā)布

    詳解基于Spring Data的領域事件發(fā)布

    這篇文章主要介紹了詳解基于Spring Data的領域事件發(fā)布,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • Java中的ThreadPoolExecutor線程池原理細節(jié)解析

    Java中的ThreadPoolExecutor線程池原理細節(jié)解析

    這篇文章主要介紹了Java中的ThreadPoolExecutor線程池原理細節(jié)解析,ThreadPoolExecutor是一個線程池,最多可使用7個參數(shù)來控制線程池的生成,使用線程池可以避免創(chuàng)建和銷毀線程的資源損耗,提高響應速度,并且可以管理線程池中線程的數(shù)量和狀態(tài)等等,需要的朋友可以參考下
    2023-12-12
  • Java系統(tǒng)變量參數(shù)獲取設置System.getProperties()的方法

    Java系統(tǒng)變量參數(shù)獲取設置System.getProperties()的方法

    這篇文章主要介紹了Java系統(tǒng)變量參數(shù)System.getProperties()獲取設置方法,文末給大家提到了Systm.getenv()與System.getProperties()區(qū)別,需要的朋友可以參考下
    2022-01-01
  • SpringBoot實現(xiàn)監(jiān)控Actuator,關閉redis監(jiān)測

    SpringBoot實現(xiàn)監(jiān)控Actuator,關閉redis監(jiān)測

    這篇文章主要介紹了SpringBoot實現(xiàn)監(jiān)控Actuator,關閉redis監(jiān)測,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評論

儋州市| 望城县| 卢氏县| 绥德县| 尉犁县| 读书| 宁远县| 弥渡县| 海安县| 贺州市| 克拉玛依市| 从化市| 陇川县| 广丰县| 襄樊市| 独山县| 碌曲县| 柳州市| 东阿县| 武胜县| 洛南县| 西安市| 榆社县| 津市市| 石家庄市| 北川| 哈巴河县| 鹤壁市| 金平| 五峰| 正定县| 原平市| 海盐县| 昌宁县| 巴南区| 海南省| 兴海县| 临洮县| 广德县| 厦门市| 东莞市|