Spring Boot自定義starter
阿新 • • 發佈:2022-06-01
一、Spring Boot啟動原理
1.例項化SpringApplication物件
SpringApplication springApplication = new SpringApplication(A.class);
// 建構函式裡呼叫初始化方法 this.initialize(sources); private void initialize(Object[] sources) { if (sources != null && sources.length > 0) { this.sources.addAll(Arrays.asList(sources)); }// 確定web應用型別 this.webEnvironment = this.deduceWebEnvironment(); // 從類路徑下找到META-INF/spring.factories配置的所有ApplicationContextInitializer,然後再儲存起來 this.setInitializers(this.getSpringFactoriesInstances(ApplicationContextInitializer.class)); // 從類路徑下找到ETA-INF/spring.factories配置的所有ApplicationListenerthis.setListeners(this.getSpringFactoriesInstances(ApplicationListener.class)); // 從多個配置類中找到有main方法的主配置類 this.mainApplicationClass = this.deduceMainApplicationClass(); }
2.呼叫run()方法
springApplication.run(args);
public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch= new StopWatch(); stopWatch.start(); ConfigurableApplicationContext context = null; FailureAnalyzers analyzers = null; this.configureHeadlessProperty(); SpringApplicationRunListeners listeners = this.getRunListeners(args); listeners.started(); try { ApplicationArguments applicationArguments = new DefaultApplicationArguments(args); ConfigurableEnvironment environment = this.prepareEnvironment(listeners, applicationArguments); Banner printedBanner = this.printBanner(environment);
// 建立ApplicationContext,決定建立web的ioc還是普通的ioc context = this.createApplicationContext(); new FailureAnalyzers(context); this.prepareContext(context, environment, listeners, applicationArguments, printedBanner);
// 重新整理容器,ioc容器初始化(如果是web應用還會建立嵌入式的Tomcat),這個就是掃描,建立,載入所有元件的地方,(配置類,元件,自動配置) this.refreshContext(context); this.afterRefresh(context, applicationArguments); listeners.finished(context, (Throwable)null); stopWatch.stop(); if (this.logStartupInfo) { (new StartupInfoLogger(this.mainApplicationClass)).logStarted(this.getApplicationLog(), stopWatch); } return context; } catch (Throwable var9) { this.handleRunFailure(context, listeners, (FailureAnalyzers)analyzers, var9); throw new IllegalStateException(var9); } }
二、自定義starter
1.建立自定義starter
a.命名規則:aaa-spring-boot-starter
b.新建一個配置類,加上註解@ConfigurationPropertie:結合相關xxxProperties類來繫結相關的配置
c.新建一個服務類,編寫服務,使用配置類
d.新建一個元件類,把服務注入元件,加上註解 @Configuration :指定這個類是一個配置類
e. SpringBoot讀取自動配置是在META-INF的spring.factories檔案中,所以我們還要將我們的自動配置類寫入其中
2.使用自定義starter
a.引入依賴
b.application.properties 配置中加上配置
c.呼叫starter裡的服務介面
參考:
https://blog.csdn.net/java_fenxiang/article/details/89718367
https://www.jb51.net/article/169172.htm