springboot 是如何識別web專案的
阿新 • • 發佈:2019-02-08
之前有朋友問題這樣的一個問題
springboot通過main方法是如何啟動web系統的,它是如何識別當前系統是不是web專案呢。
今天突然想起來了,翻看了下springboot的程式碼,在此坐下記錄
springboot通過SpringApplication的run方法作為入口啟動。
系統啟動的時候我們傳入的是一個source的object物件。一般是傳入springboot在我們系統的啟動類
在內部例項化了一個SpringApplication物件並且初始化
在初始化過程中檢查當前系統是否是web系統程式碼如下
private void initialize(Object[] sources) {
if (sources != null && sources.length > 0) {
this.sources.addAll(Arrays.asList(sources));
}
this.webEnvironment = deduceWebEnvironment();
setInitializers((Collection) getSpringFactoriesInstances(
ApplicationContextInitializer.class));
setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
this .mainApplicationClass = deduceMainApplicationClass();
}
private boolean deduceWebEnvironment() {
for (String className : WEB_ENVIRONMENT_CLASSES) {
if (!ClassUtils.isPresent(className, null)) {
return false;
}
}
return true;
}
private static final String[] WEB_ENVIRONMENT_CLASSES = { "javax.servlet.Servlet",
"org.springframework.web.context.ConfigurableWebApplicationContext" };
通過以上程式碼我們可以看到,系統檢查是不是存在以上兩個介面的例項化物件以推斷當前系統是不是web專案