spring事件驅動過程分析

2021-08-14 17:49:22 字數 2057 閱讀 2359

在看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...