openfire原始碼解讀一 專案啟動

2021-08-30 13:53:13 字數 1597 閱讀 3939

一: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...