1. 程式人生 > 其它 >Spring Boot自定義starter

Spring Boot自定義starter

一、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配置的所有ApplicationListener
this.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