Spring RMI原始碼分析

2021-07-11 23:30:00 字數 2460 閱讀 3193

1.客戶端rmiproxyfactorybean繼承關係

# remotingsupport 

# \----remoteaccessor 

#      \----urlbasedremoteaccessor 

#           \----remoteinvocationbasedaccessor 

#                \----rmiclientinterceptor 

#                     \----rmiproxyfactorybean 

rmiproxyfactorybean實現了initializingbean,factorybean,methodinterceptor呼叫過程如下:

# rmiproxyfactorybean.afterpropertiesset

# \----new proxyfactory(getserviceinte***ce(), this) 建立**工廠,沒有傳入target物件,事實也沒有target物件

# \----proxyfactory.getproxy    返回的**物件儲存到serviceproxy

rmiproxyfactorybean.getobject 返回serviceproxy

# rmiproxyfactorybean.invoke ***方法,呼叫遠端服務物件的方法時被此方法攔截並返回

# \----rmiclientinterceptor.invoke 該方法引數是methodinvocation物件,維護method物件及若干引數物件

#      \----rmiclientinterceptor.getstub

#      |    \----rmiclientinterceptor.lookupstub 利用jdk原生rmi查詢服務

#      \----rmiclientinterceptor.doinvoke    

#           \----rmiclientinterceptor.doinvoke 過載方法,如果服務端是spring匯出的rmi服務,此時stub實現了繼承了remote介面的rmiinvocationhandler介面

#           |    \----remoteinvocationbasedaccessor.createremoteinvocation 將本地methodinvocation物件封裝為remoteinvocation物件

#           |    \----rmiinvocationhandler.invoke 該方法為stub(實現了rmiinvocationhandler)的方法,將唯一的引數remoteinvocation物件,該物件封裝了方法名及若干引數物件

#           \----rmiclientinterceptorutils.invokeremotemethod 如果服務端是普通的rmi服務,利用反射機制使用stub進行普通的rmi請求

2.服務端rmiserviceexporter繼承關係

# remotingsupport 

# \----remoteexporter 

#      \----remoteinvocationbasedexporter 

#           \----rmibasedexporter 

#                \----rmiserviceexporter 

rmiserviceexporter實現了initializingbean,呼叫過程如下:

# rmiserviceexporter.afterpropertiesset

# \----rmiserviceexporter.prepare

#      \----rmiserviceexporter.checkservice

#      |    \----remoteexporter.getservice 如果實現了remote介面直接返回

#      |    \----remoteexporter.getproxyforservice 如果沒有實現remote介面

#      |    |    \----new proxyfactory

#      |    |    \----proxyfactory.addinte***ce 將配置檔案中宣告的serviceinte***ce作為**介面

#      |    |    \----proxyfactory.getproxy 生成**物件

#      \----unicastremoteobject.exportobject

#      \----registry.bind

#      \----remoteinvocationbasedexporter.invoke

#           \----defaultremoteinvocationexecutor.invoke

#                \----remoteinvocation.invoke

spring原始碼分析 spring原始碼分析

1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...

思科VPP原始碼分析(dpo機制原始碼分析)

vpp的dpo機制跟路由緊密結合在一起。路由表查詢 ip4 lookup 的最後結果是乙個load balance t結構。該結構可以看做是乙個hash表,裡面包含了很多dpo,指向為下一步處理動作。每個dpo都是新增路由時的乙個path的結果。dpo標準型別有 dpo drop,dpo ip nu...

redux原始碼分析(三) 原始碼部分

下面是每個部分的一些解讀 createstore apicreatestore reducer,initialstate enhancer 曾經非常好奇這個函式的第二個引數到底是initialstate還是enhancer,因為見過兩種寫法都有的,以為是版本問題。看了原始碼才發現,都可以的。如果你不...