javascript
Spring的Lifecycle
Lifecycle接口定義了每個對象的重要方法,每個對象都有自己的生命周期需求,如下:
public interface Lifecycle { void start(); void stop(); boolean isRunning(); }任何spring管理的對象都可以實現(xiàn)這個接口。那么,當ApplicationContext自身啟動和停止時,它將自動調(diào)用上下文內(nèi)所有生命周期的實現(xiàn)。通過委托給LifecycleProcessor來做這個工作。注意LifecycleProcessor自身擴展了Lifecycle接口。它也增加了兩個其他的方法來與上下文交互,使得可以刷新和關閉。
public interface LifecycleProcessor extends Lifecycle { void onRefresh(); void onClose(); }啟動和關閉調(diào)用的順序是很重要的。如果兩個對象之間存在依賴關系,依賴類要在其依賴類后啟動,依賴類也要在其依賴類前停止。然而有時候其之間的依賴關系不是那么直接。你可能僅僅知道某種類型的對象應該在另一類型對象前啟動。在那些情況下,SmartLifecycle接口定義了另一個選項,在其父類接口Phased中定義命名為getPhase()方法。
public interface Phased { int getPhase(); } public interface SmartLifecycle extends Lifecycle, Phased { boolean isAutoStartup(); void stop(Runnable callback); }當啟動時,有最低phase的對象首先啟動,并且停止時,按照相反的順序結束。因此,實現(xiàn)了SmartLifecycle接口并且其getPhase()方法返回Integer.MIN_VALUE的一個對象將是首先被啟動并且最后停止。與其相反對應的對象,Integer.MAX_VALUE的phase的值,將指明最后啟動和最先停止(可能是其依賴其他對象工作運行)。當考慮phase值時,了解任何普通Lifecycle對象(沒有實現(xiàn)SmartLifecycle其值將是0)的默認phase也很重要。因此,任何負數(shù)phase值將表示對象應該在那些標準組件前啟動(并其之后停止),并且對于正數(shù)的phase值按照相反順序啟動停止。
如你在SmartLifecycle接口中定義的stop方法內(nèi)有一回調(diào)參數(shù)。任何實現(xiàn)類在其關閉完成后必須調(diào)用回調(diào)的run方法。必須的時候由于實現(xiàn)了LifecycleProcessor接口的實現(xiàn)類可以進行異步關閉操作,DefaultLifecycleProcessor對于在每個phase調(diào)用那個回調(diào)內(nèi)的對象組將等待一個超時時間。默認的每個phase的超時是30秒。你可以通過在上下文內(nèi)定義一個命名為lifecycleProcessor的bean重寫默認的生命周期處理器實例。如果你僅僅想修改超時時間,如下定義將會很有用:
<bean id="lifecycleProcessor"class="org.springframework.context.support.DefaultLifecycleProcessor"> <!-- timeout value in milliseconds --> <property name="timeoutPerShutdownPhase" value="10000"/> </bean>LifecycleProcessor接口定義了回調(diào)方法來刷新和關閉上下文。后者僅簡單地做關閉處理如同直接地調(diào)用stop方法,但是當關閉上下文時,這將起作用。刷新回調(diào)使得SmartLifecycle bean的另一個功能起作用。當上下文刷新時(在所有的對象實例化和初始化后),將調(diào)用那個回調(diào),并且在那個點上,默認的生命周期處理器將檢查每個SmartLifecycle對象的isAutoStartup()方法的返回值。如果是true,那么對象將在那個點上啟動而不是等一個上下文的明確調(diào)用或者等其自己的start()方法(不像上下文的刷新,上下文啟動對于標準的上下文實現(xiàn)不是自動發(fā)生的)phase值與依賴關系一樣將如上所述決定了啟動順序。
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/wade-luffy/p/6074088.html
總結
以上是生活随笔為你收集整理的Spring的Lifecycle的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 课程2 谈论音乐行业的趋势
- 下一篇: background-clip与back