回覆列表
  • 1 # 破力

    不是沒有實現類,而是動態代理模式對使用者遮蔽了實現類,使使用者只用關心業務,使複雜操作透明化。

    比如常見的這種寫法在mybatis和jpa中是最常用的。

    代理模式介紹

    為其他物件提供一種代理以控制這個物件的訪問。在執行時動態的對某些物件進行代理。

    代理模式上,基本上有Subject角色,RealSubject角色,Proxy角色。其中:Subject角色負責定義RealSubject和Proxy角色應該實現的介面;RealSubject角色用來真正完成業務服務功能;Proxy角色負責將自身的Request請求,呼叫realsubject 對應的request功能來實現業務功能,自己不真正做業務。

    動態代理模式

    代理類在程式執行過程中透過反射技術自動生成的,在程式執行之前是看到靜態代理類的。

    代理設計模式的實現方式:

    1: 如果目標類已經實現了某個介面,則代理類和目標類實現相同的介面並在代理類中持有目標類的引用,JDK動態代理使用的就是這種方式。

    2. 如果目標類沒有實現任何介面則生成代理類是目標類的子類,此時目標類一定不能是final類

    擴充套件實現無實現介面呼叫

    其實除了動態代理,還可以使用codegen技術,動態的生產位元組碼程式,來做到這種效果。codegen可以直接生產java位元組碼檔案,也可以直接生產指令集程式碼。

  • 2 # 程式設計狂徒

    因為我們平時寫的程式碼都是在本地跑的,不需要和別的系統進行通訊。

    如果和其他的系統進行通訊,比如現在的分散式框架,A系統呼叫B系統裡面的方法,就要用到http協議等通訊,這時候A系統裡面的一些程式碼,java bean就要實現序列化,透過http傳輸過去,B接受到之後再反序列化。

    現在的rpc框架,廣泛的應用這個。

  • 3 # AllenHu2018

    應該分兩種情況

    一種是眾多框架上的介面方法,例如mybatis等 為何介面方法執行可以有效果,原因就在於動態代理和反射的應用,本質呼叫的是代理類的實現,spring也是類似。

    另外就是所謂本地方法(JNI),本地方法一般都是JAVA語言實現,是為了擴充套件JAVA功能等而實現,程式碼也是可以透過一定方式看到,反編譯和JAVA原始碼是看不到的。

  • 4 # Java猿

    有幾類表面是沒有實現類,其實是有的。

    1,動態代理生成的,比如mybatis介面

    2,spi實現留給其他實現,比如jdbc驅動

    3,rpc遠端呼叫,比如dubbo

  • 5 # 井151276607

    不是沒有實現,而是你對實現的理解出了問題。

    許多東西是java與生俱來的東西,比如java的介面與實現。他們在應用程式設計時,編輯器本身自身對“環境”有充分的預定義與理解。當然這是開發環境、工具開發者做出的貢獻。這個階段,應用程式碼之間沒有任何強制得的關聯。進入到編譯階段,編譯工具才對程式碼做強制的檢驗。換句話說,“智慧編輯”器引導你看到的是介面定義,而編譯器和連線工具在背後還做了許多與“執行時”環境相關聯的工作。應用系統的“執行時”,不僅僅限於jdk的環境,還包含許多第三方的工具、功能包。java技術的亮點之一就是,在精心設計的安全框架下,想嚮應用開發者,提供了級別化的類定義、裝載策略和工具。

    篇幅限制,就說這些吧。

  • 6 # 陽光吹過髮梢

    1.Java或者Spring提供了介面或者抽象方法,第三方廠商提供具體實現。透過代理等方式,執行具體的實現。這種情況,往往可以透過debug找到對應的實現。

    2.本地方法:JDK中含有native關鍵字就是本地方法,具體實現是C之類的語言所編寫,不方便看到具體實現。

    3.遠端呼叫:其實也可以理解一個介面,只是跨服務而已,具體實現在被呼叫的方法裡面。是否能看到實現,得看你是否有許可權看到對應服務的程式碼。

  • 中秋節和大豐收的關聯?
  • 薩達姆統治時期是伊拉克最黑暗的時期,讓美國鑽了空子,你認同嗎?