一:org.jivesoftware.openfire.starter.serverstarter中的main啟動
二:首先獲得classloader(類載入器)
classloader的知識。
三:獲取當前類的類載入器的方法
private classloader findparentclassloader()
}return parent;
}
類載入器的種類:
四:獲取openfire的lib路徑
string libdirstring = system.getproperty("openfire.lib.dir");
private static final string default_lib_dir = "../lib";
file libdir;
if(libdirstring != null)
}else
五:獲取專案路徑
string adminlibdirstring = system.getproperty("openfirehome");
if (adminlibdirstring == null) else
file adminlibdir = new file(adminlibdirstring);
if (!adminlibdir.exists())
六:建立了乙個自定義的類載入器,該類載入器同時載入了所需要的jar包
classloader loader = new jiveclassloader(parent, libdir);
class jiveclassloader extends urlclassloader , parent);
file jars = libdir.listfiles(new filenamefilter()
else if (smallname.endswith(".zip"))
return accept;
}});
// 如果找不到jar或zip檔案,什麼也不做。
if (jars == null)
// 排序 jars 否則不會按順序載入 (e.g. it's not alphabetical)
// 如果將補丁jar新增到lib資料夾,用來修復或者安裝,那順序很重要
arrays.sort(jars);
// 呼叫父類urlclassloader的addurl方法載入檔案到classpath中
for (int i = 0; i < jars.length; i++) }}
}
七、設定自定義的類載入器為當前執行緒的類載入器
thread.currentthread().setcontextclassloader(loader);
八、利用當前執行緒的類載入器載入類檔案
class containerclass = loader.loadclass("org.jivesoftware.openfire.xmppserver");
jQuery原始碼解讀一
前言 我為什麼要看這個原始碼,很簡單,尋找我自己寫的js框架與jquery之間的差異,取長補短,最終目標是提高js程式設計的乙個眼界,看看別人是怎麼想的,因為自己乙個人的想法往往是片面的,也為了能讓自己的主觀漸漸接近客觀事實。雖然jquery框架能直接拿來用,但是對於偏愛研究的人來說,還是喜歡寫原生...
hadoop原始碼解讀一
開啟已經編譯的hadoop資料夾,bin 看來像hadoop下的各種服務和元件,有cotainer,hdfs,mapred,yarn sbin hadoop各項服務的啟動指令碼,配置指令碼 反正裡面全是指令碼 設定各方面的都有 etc 各項的配置檔案,只要可以配置的都在裡面,包括dfs配置,排程器配...
HashMap原始碼解讀(一)
在我們面試過程中,經常會遇到要求說hashmap的底層實現,在jdk原始碼中,oracle公司給出了我們hashmap的原始碼,通過閱讀hashmap的原始碼,我們可以很清楚的知道hashmap是怎麼實現的。下面我們開始閱讀hashmap的原始碼吧。public class hashmap exte...