jetty可以說是乙個基於handler設計的web伺服器,其通過組合各種handler實現對請求的處理。所以原始碼閱讀部分先從handler部分開始,而abstracthandler是大部分handler都繼承了的父類,因此先了解它的原始碼。下面先來看下abstracthandler的類圖,了解下它的繼承關係。
從類圖上就可以看到abstracthandler實現了lifecycle和handler兩個介面,所以同時具備這兩個類的特性。
對於handler介面,其實裡面主要定義了乙個處理請求的handle()方法。
public
inte***ce
handler
extends
lifecycle, destroyable
對於lifecycle介面這裡繼承的是其乙個子類aggregatelifecycle,這個類是定義用來管理集合類的生命週期的,它裡面持有乙個list_beans
,可以將一些元件加入到這個list中,如果這些元件實現了lifecycle介面,則aggregatelifecycle統一負責管理它們的生命週期—在aggregatelifecycle啟動的時候啟動這些元件,在aggregatelifecycle停止的時候停止這些元件。下面是其部分原始碼:
private
final list_beans=new copyonwritearraylist();
private
boolean _started=false;
//定義的乙個內部類
private
class
bean
final object _bean;
volatile
boolean _managed=true;
public string tostring()";}
}//會依次啟動管理的所有未啟動的lifecycle元件
@override
protected
void
dostart() throws exception
}// indicate that we are started, so that addbean will start other beans added.
_started=true;
super.dostart();
}//新增乙個元件,並且指定是否被管理,如果不指定為被管理元件,
//則aggregatelifecycle不複雜管理它們的生命週期
public
boolean
addbean(object o, boolean managed)
catch(exception e)}}
return
true;
}
其實分析了上面兩個繼承的父類之後, abstracthandler中基本就分析完了,因為abstracthandler本身沒有對父類的關鍵方法,比如dostart()和dostop()進行重寫,也沒有實現handle()方法(留給具體的子類去實現了),唯一重寫的乙個方法就是setserver()方法。abstracthandler的全部原始碼如下:
public
abstract
class
abstracthandler
extends
aggregatelifecycle
implements
handler
//僅僅是簡單的呼叫父類的dostart(),沒有加任何新邏輯
@override
protected
void
dostart() throws exception
",this);
super.dostart();
}@override
protected
void
dostop() throws exception
",this);
super.dostop();
}//重寫了handler介面中的setserver()方法
public
void
setserver(server server)
public server getserver()
public
void
destroy()
public
void
}
原始碼分析之LayoutInflater
簡介 inflate填充的過程 viewstub,merge,include的載入過程 layoutinflater系統服務的註冊過程 systemserviceregistry類有個靜態 塊,完成了常用服務的註冊,如下 static 註冊am registerservice context.act...
原始碼分析之HashMap
首先hashmap繼承了abstractmap,並且實現了map cloneable和serializable三個介面。cloneable和serializable是比較常規的兩個介面,在這裡並不作為重點。重點將會放在abstractmap和map兩個規範上。其中abstractmap是乙個抽象類,...
原始碼分析之String
先看屬性 底層是char陣列,一目了然 可以看到,value是儲存string的內容的,即當使用string str abc 的時候,本質上,abc 是儲存在乙個char型別的陣列中的。string底層的儲存結構是乙個字元型別的陣列,同樣也是被final修飾,因此一旦這個字元陣列被建立後,value...