在看spring原始碼之前確保理解了jdk中的 eventobject,eventlistener的使用場景,其實體現的是觀察者模式,適用於很多場景。
public
abstract
class
extends
eventobject)*/
public
(object
source
)/**
*/public
final
long
gettimestamp
()}
***基類如下,在接收到事件後如果是自己感興趣的就進行相應處理。
事件觸發的流程是怎樣的?以 contextrefreshedevent 為例。在context初始化完成後,在 finishrefresh 方法中會發布 contextrefreshedevent 事件。
protected
void
finishrefresh
()protected
void
publishevent
(object
event
,resolvabletype
eventtype
)else
}// multicast right now if possible - or lazily once the multicaster is initializedif(
this.!=
null
)else
// publish event via parent context as well... 上層的context也會響應該事件if(
this
.parent
!=null
)else}}
public
void
multicastevent
(final
event
,resolvabletype
eventtype
)});
}else
}}
內部 listener 是如何維護的?使用的哪種集合?是否執行緒安全?
private
class
listenerretriever
public
collection
<
>>
()if
(!this..
isempty
())}
catch
(nosuchbeandefinitionexceptionex)
}}// 根據order註解排序
annotationawareordercomparator
.sort
(alllisteners
);return
alllisteners;}
}
在增加元素到set的時候有同步操作。
// 使用 listenerretriever 作為加鎖物件
private
object
retrievalmutex
=this
.defaultretriever
;public
void
(>
listener)}
public
void
(string
listenerbeanname
)}
UART驅動過程
urat 工作流程 1.配置傳送和接收口線資訊來實現訪問方式 具體使用io的埠及讀寫方式即配置gpiox的pc0 pc1 pc2暫存器 2.開啟uart cr中的run位開啟波特率發生器使uart啟用 3.配置佇列機制這個機制是接收和傳送公用的配置 選擇關閉佇列機制即不使用fifo中的其他15個資料...
Spring啟動過程分析 啟動流程簡介
首先,對於乙個web應用,其部署在web容器 tomcat 中,web容器提供其乙個全域性的上下文環境,這個上下文就是servletcontext,其為後面的spring ioc容器提供宿主環境 spring容器啟動流程 定位在spring中,使用統一的資源表現方式resource,定位到sprin...
spring容器以及Spring啟動過程
beanfactory介面包含以下幾個基本方法 boolean containbean string name 判斷spring容器是否包含id為name的bean例項。getbean classrequiredtypr 獲取spring容器中屬於requiredtype型別的唯一的bean例項。o...