Spring Boot 啟動執行

2021-09-26 22:59:22 字數 2979 閱讀 4868

public static void main(string args) 

return run(new class<?> , args);

}}

spring boot主程式main方法只做了兩件事

this(null, primarysources);

} //resourceloader = null

this.resourceloader = resourceloader;

assert.notnull(primarysources, "primarysources must not be null");

this.primarysources = new linkedhashset<>(arrays.aslist(primarysources));

/*** 該方法主要呼叫以下方法進行判斷

* classutils.ispresent(string classname, @nullable classloader classloader)

* classname 全類名

* classloader 類載入器

* 判斷能否從classloader(類載入器)中獲取與classname(全類名)相對應的class類

* (方法內部判斷不止乙個判斷,但大致是這個意思,有興趣可以自己研究)

*//**

* 呼叫了兩個方法

* 這個方法很重要,在下面有單獨說明,看完再繼續

* * 2. setinitializers

* 為this.initializers初始化並賦值

*//**

* 和上面方法是一樣的

*//**

* 儲存main(spring boot主程式)所在類的class物件

*/}

1.  getspringfactoriesinstances

private collectiongetspringfactoriesinstances(classtype) );

}private collectiongetspringfactoriesinstances(classtype, class<?> parametertypes, object... args)

2.  loadfactorynames

public static listloadfactorynames(class<?> factoryclass, @nullable classloader classloader) 

private static map> loadspringfactories(@nullable classloader classloader) else }}

/*** 所有meta-inf/spring.factories配置檔案下的資料都被儲存起來

*/cache.put(classloader, result);

/*** 返回獲取到的linkedmultivaluemap資料(就是資料集,內部封裝了map,value值是list集合)

* * 總結:

* 這個方法就是使用類載入器獲取所有meta-inf/spring.factories檔案位址,並把所有檔案以key-value的形式進行解析

* 最後儲存解析出來的資料並返回

*/return result;

} catch (ioexception var13)

}}

stopwatch stopwatch = new stopwatch();

stopwatch.start();

collectionexceptionreporters = new arraylist<>();

configureheadlessproperty();

/*** getspringfactoriesinstances上面說過,跳過

*//**

* 使listeners物件變數this.listeners中的每個物件呼叫starting()方法(就是啟動並初始化物件)

*/listeners.starting();

try

/***/

listeners.started(context);

/***/

}catch (throwable ex)

try

catch (throwable ex)

return context;}

1.  preparecontext

/*** 為ioc容器設定環境

*/context.setenvironment(environment);

/*** ioc容器後置處理,根據需要設定其它處理

*//**

*//**

*/listeners.contextprepared(context);

/*** 日誌記錄相關設定

*/if (this.logstartupinfo)

/*** 獲取bean工廠並根據條件新增元件

*/configurablelistablebeanfactory beanfactory = context.getbeanfactory();

if (printedbanner != null)

if (beanfactory instanceof defaultlistablebeanfactory)

setsources = getallsources();

assert.notempty(sources, "sources must not be empty");

/*** 將bean載入到應用程式上下文中

*/load(context, sources.toarray(new object[0]));

/***/

listeners.contextloaded(context);}

springboot專案啟動自動執行

order value 1 專案啟動執行方法的順序,從小到大 component override system.out.println start 帶有此註解的類在專案啟動時會自動註冊在spring容器 service public class redislockinit 被 postconstr...

springboot啟動後執行某些命令

多個類實現介面可以使用 order註解來定義執行順序 專案啟動完成了,因此可以注入spring管理的類 例項 component order 1 autowired private stringredistemplate stringredistemplate override stringredi...

spring boot, 容器啟動後執行某操作

常有在spring容器啟動後執行某些操作的需求,現做了乙個demo的實現,做一下記錄,也希望可以給需要的同學提供參考。1.spring啟動後,以新執行緒執行後續需要的操作,所以執行類實現runnable介面 component public class stepexecutor implements...