Springboot 起動プロセスのコーミング

起動シーケンスは主に SpringApplication.run() メソッドを整理することを目的としています。

SpringApplication クラスのインスタンス化

  1. BootstrapRegistryInitializer インターフェイスのインスタンス化
    1) BootstrapRegistryInitializer 実装クラスをロードし、SpringFactoriesLoader クラスが META-INF/spring.factories フォルダーに定義されている構成ファイル Resource をロードして、リソース リスト Map<ClassLoader, MultiValueMap<String, String>> 2) を初期化します。 .
    Load BootstrapRegistryInitializer の実装クラスをインスタンス化します。

  2. ApplicationContextInitializer は実装クラスのリソース設定ファイルを読み込み、関連クラスをインスタンス化します
    1) ApplicationContextInitializer 実装クラスを読み込み、SpringFactoriesLoader クラスは META-INF/spring.factories フォルダに定義された設定ファイルを読み込みます リソースはリソースリスト Map を初期化します<ClassLoader , MultiValueMap<String, String>>
    2). ApplicationContextInitializer をインスタンス化する実装クラスをロードすると、springboot が組み込みのインスタンス化クラスを開始します。

org.springframework.boot.autoconfigure.SharedMetadataReaderFactoryContextInitializer,
org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener
  1. ApplicationListenerインタフェースクラスのリソース設定ファイルの読み込みとインスタンス化
    1) ApplicationListener実装クラスをロードし、SpringFactoriesLoaderクラスがMETA-INF/spring.factoriesフォルダに定義された設定ファイルをロード リソースがリソースリストを初期化 Map<ClassLoader , MultiValueMap< String, String>>
    2) springbootの組み込みインスタンス化クラスであるApplicationListenerの実装クラス
org.springframework.boot.autoconfigure.BackgroundPreinitializer

2. SpringApplication.run()起動メソッド

  1. this.createBootstrapContext() は、BootstrapRegistryInitializer インターフェイスのインスタンス化クラス呼び出しを実行します。

  2. SpringApplicationRunListeners のインスタンス化と関連実装クラスの呼び出し
    1). SpringApplicationRunListeners をインスタンス化し、SpringApplicationRunListeners の監視を開始します SpringApplicationRunListeners
    実装クラスは SpringFactoriesLoader クラスによってロードされ、META-INF/spring.factories フォルダー内の構成ファイル Resource で定義されます。リソースリスト Map< ClassLoader, MultiValueMap<String, String>> を初期化します
    2). すべての SpringApplicationRunListeners の開始メソッドをトラバースして呼び出し、クラス インターフェイスの初期化を実装します

  3. ConfigurableEnvironmentをインスタンス化し、リスナー、bootstrapContext、applicationArgumentsでSpringboot起動用の環境構成情報を設定します。

  4. バナーを印刷する

  5. ConfigurableApplicationContext クラスを作成する

  6. SpringBootExceptionReporter の作成と読み込み
    1). Load META-INF/spring.factories フォルダー内の設定ファイル Resource に定義されている SpringBootExceptionReporter 実装クラスの作成と読み込み リソース リストの初期化 Map<ClassLoader, MultiValueMap<String, String>> 2). Create
    SpringBootExceptionReporter実装クラスをロードします

  7. コンテナー prepareContext を初期化し、
    初期化された ConfigurableApplicationContext、ConfigurableEnvironment、SpringApplicationRunListeners、ApplicationArguments、および Banner に基づいて初期化されたコンテキスト コンテキストを準備します。 1)
    ApplicationContextInitializer を実装する実装クラスの context 属性を設定します。
    2) リスナーの context 属性を設定します
    。 3) Bean のロード時にループするかどうかを決定する beanFactory 属性。allowCircularReferences に
    依存します。 4) beanFactory のプロパティを設定します。Bean のロード時に同じ名前を持つ Bean のオーバーライド属性allowBeanDefinitionOverriding を許可するかどうか。Springboot のデフォルトは false です。 5) コンテキスト属性 LazyInitialization を設定します
    。 、遅延ロード Bean のロードを遅延するかどうかを構成します。
    6) Bean をロードする BeanDefinitionLoader を作成します。そして、BeanをロードするときにresourceLoaderと環境を定義します

遅延ロードされた Bean は @Lazy アノテーションとともに使用されます。遅延ロードの利点:
リソースの節約: アプリケーション内に多数の Bean がある場合、すべての Bean を一度に初期化すると、大量のメモリと処理時間が消費される可能性があります。遅延初期化により、Bean は必要な場合にのみ初期化されるため、不必要なリソースの消費を回避できます。
起動時間の短縮: 遅延初期化では、
必要な場合にのみ Bean がロードされて初期化されるため、アプリケーションの起動時間を短縮できます。アプリケーションの起動時に使用できない可能性のある大規模な Bean または複雑な Bean の場合、遅延初期化により起動時間が大幅に短縮される可能性があります。
循環依存関係を解決する: Spring コンテナーは Bean 間の依存関係を管理できます。循環依存関係がある場合、遅延初期化は問題の解決に役立つことがあります。遅延初期化により、Spring
コンテナは、初期化フェーズ中に未解決の循環依存関係を検出するのではなく、実行時に Bean 間の依存関係を 1 つずつ解決して満たすことができます。

  1. コンテキストの更新freshContext
    1) registerShutdownHook フック メソッドを通じてコン​​テナが開かれているか閉じているかを決定します。
    2) beanFactory を Refresh() し
    ます。 (1) BeanFactory のポストプロセッサを設定し、BeanFactoryPostProcessor インターフェイスを実装します。
    (2) BeanFactory のポストプロセッサを設定します。 Bean、BeanPostProcessor インターフェイスの実装
    (3) 国際リソースを初期化、HierarchicalMessageSource インターフェイスの実装
    (4) Spring コンテナ プラクティスの初期化、ApplicationEventMulticaster インターフェイスの実装
    (5) onRefresh() テーマ リソースの更新、HierarchicalThemeSource インターフェイスの実装、 ServletContext
    (6) モニターを登録 ApplicationListener イベントをリッスンし、ApplicationListener 実装インターフェースのコレクションを取得し、ブロードキャスト監視 (ApplicationEventMulticaster インターフェース実装クラス) を実行し、対応する excute メソッドを実行し、listener.onApplicationEvent(event) メソッドを実行します (7)バイトコードによるバイトコード ファイルのロード Aspect アスペクトを動的にウィービングする
    場合、LoadTimeWeaverAware インターフェイス
    (8) はインスタンス化された LifecycleProcessor インターフェイスをロードし、開始/停止関連インターフェイスを呼び出します。
    Spring は、start/stop メソッドを含む Lifecycle インターフェイスも提供します。このインターフェイスを実装すると、Spring は、ライフサイクルの開始時に start メソッドが呼び出されてライフサイクルを開始し、Spring がシャットダウンされたときに stop メソッドが呼び出されることを保証します。ライフサイクルを終了します。通常、起動後に継続的に実行するなどのバックグラウンド プログラムを構成するために使用されます (MQ のポーリングなど)。ApplicationContext 初期化の最後のステップは、この関数が確実に実現されるようにすることです。
    (9) ContextRefreshedEvent イベント機構を呼び出し、ApplicationContextEvent を実装して ApplicationEvent 抽象クラスを実装します。
  2. 起動ログを印刷します。
  3. 実行インターフェイスイベント、ApplicationRunner、CommandLineRunnerインターフェイスイベントコレクション

スプリングブート起動フローチャート

ここに画像の説明を挿入します

springboot はコンテキストの作成 createApplicationContext プロセス

ここに画像の説明を挿入します

spring-boot -autoconfig自動アセンブリモジュールの下のMETA-INF/spring.factories自動アセンブリリスト

springboot が起動すると、jar パッケージの下にある META-INF/spring.factories ファイルのロードが開始され、SpringFactoriesLoader.loadFactoryNames によって指定されたアノテーションのインスタンス化実装とインターフェイスの実装クラスがロードされて、対応する自動アセンブリが完了します。
たとえば、springbootApplicatin 起動クラスの下の @EnableAutoConfiguration アノテーションはアセンブリ構成クラスをロードし、EnableAutoConfiguration アノテーション クラスを通じて、インスタンス化された org.springframework.boot.autoconfigure.EnableAutoConfiguration 構成リストの下の構成クラスがロードされます。

SpringFactoriesLoader.loadFactoryNames ロードクラスの説明は、型に従ってクラスをロードすることです

 loadFactoryNames(Class<?> factoryType, @Nullable ClassLoader classLoader)```
# Initializers
org.springframework.context.ApplicationContextInitializer=\
org.springframework.boot.autoconfigure.SharedMetadataReaderFactoryContextInitializer,\
org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener

# Application Listeners
org.springframework.context.ApplicationListener=\
org.springframework.boot.autoconfigure.BackgroundPreinitializer

# Auto Configuration Import Listeners
org.springframework.boot.autoconfigure.AutoConfigurationImportListener=\
org.springframework.boot.autoconfigure.condition.ConditionEvaluationReportAutoConfigurationImportListener

# Auto Configuration Import Filters
org.springframework.boot.autoconfigure.AutoConfigurationImportFilter=\
org.springframework.boot.autoconfigure.condition.OnBeanCondition,\
org.springframework.boot.autoconfigure.condition.OnClassCondition,\
org.springframework.boot.autoconfigure.condition.OnWebApplicationCondition

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\
org.springframework.boot.autoconfigure.cloud.CloudServiceConnectorsAutoConfiguration,\
org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,\
org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration,\
org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration,\
org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraReactiveDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraReactiveRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.couchbase.CouchbaseDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.couchbase.CouchbaseReactiveDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.couchbase.CouchbaseReactiveRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.couchbase.CouchbaseRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration,\
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.jdbc.JdbcRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.ldap.LdapRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.mongo.MongoReactiveDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.mongo.MongoReactiveRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.neo4j.Neo4jDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.neo4j.Neo4jRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.solr.SolrRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,\
org.springframework.boot.autoconfigure.data.redis.RedisReactiveAutoConfiguration,\
org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration,\
org.springframework.boot.autoconfigure.elasticsearch.jest.JestAutoConfiguration,\
org.springframework.boot.autoconfigure.elasticsearch.rest.RestClientAutoConfiguration,\
org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration,\
org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration,\
org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration,\
org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration,\
org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration,\
org.springframework.boot.autoconfigure.hazelcast.HazelcastAutoConfiguration,\
org.springframework.boot.autoconfigure.hazelcast.HazelcastJpaDependencyAutoConfiguration,\
org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration,\
org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration,\
org.springframework.boot.autoconfigure.influx.InfluxDbAutoConfiguration,\
org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration,\
org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration,\
org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration,\
org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.JndiConnectionFactoryAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.artemis.ArtemisAutoConfiguration,\
org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration,\
org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration,\
org.springframework.boot.autoconfigure.jooq.JooqAutoConfiguration,\
org.springframework.boot.autoconfigure.jsonb.JsonbAutoConfiguration,\
org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration,\
org.springframework.boot.autoconfigure.ldap.embedded.EmbeddedLdapAutoConfiguration,\
org.springframework.boot.autoconfigure.ldap.LdapAutoConfiguration,\
org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,\
org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration,\
org.springframework.boot.autoconfigure.mail.MailSenderValidatorAutoConfiguration,\
org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration,\
org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\
org.springframework.boot.autoconfigure.mongo.MongoReactiveAutoConfiguration,\
org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration,\
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\
org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration,\
org.springframework.boot.autoconfigure.reactor.core.ReactorCoreAutoConfiguration,\
org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration,\
org.springframework.boot.autoconfigure.security.servlet.SecurityRequestMatcherProviderAutoConfiguration,\
org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration,\
org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoConfiguration,\
org.springframework.boot.autoconfigure.security.reactive.ReactiveSecurityAutoConfiguration,\
org.springframework.boot.autoconfigure.security.reactive.ReactiveUserDetailsServiceAutoConfiguration,\
org.springframework.boot.autoconfigure.sendgrid.SendGridAutoConfiguration,\
org.springframework.boot.autoconfigure.session.SessionAutoConfiguration,\
org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration,\
org.springframework.boot.autoconfigure.security.oauth2.client.reactive.ReactiveOAuth2ClientAutoConfiguration,\
org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration,\
org.springframework.boot.autoconfigure.security.oauth2.resource.reactive.ReactiveOAuth2ResourceServerAutoConfiguration,\
org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration,\
org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration,\
org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration,\
org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration,\
org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration,\
org.springframework.boot.autoconfigure.transaction.jta.JtaAutoConfiguration,\
org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration,\
org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration,\
org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration,\
org.springframework.boot.autoconfigure.web.reactive.HttpHandlerAutoConfiguration,\
org.springframework.boot.autoconfigure.web.reactive.ReactiveWebServerFactoryAutoConfiguration,\
org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration,\
org.springframework.boot.autoconfigure.web.reactive.error.ErrorWebFluxAutoConfiguration,\
org.springframework.boot.autoconfigure.web.reactive.function.client.ClientHttpConnectorAutoConfiguration,\
org.springframework.boot.autoconfigure.web.reactive.function.client.WebClientAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration,\
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.websocket.reactive.WebSocketReactiveAutoConfiguration,\
org.springframework.boot.autoconfigure.websocket.servlet.WebSocketServletAutoConfiguration,\
org.springframework.boot.autoconfigure.websocket.servlet.WebSocketMessagingAutoConfiguration,\
org.springframework.boot.autoconfigure.webservices.WebServicesAutoConfiguration,\
org.springframework.boot.autoconfigure.webservices.client.WebServiceTemplateAutoConfiguration

# Failure analyzers
org.springframework.boot.diagnostics.FailureAnalyzer=\
org.springframework.boot.autoconfigure.diagnostics.analyzer.NoSuchBeanDefinitionFailureAnalyzer,\
org.springframework.boot.autoconfigure.jdbc.DataSourceBeanCreationFailureAnalyzer,\
org.springframework.boot.autoconfigure.jdbc.HikariDriverConfigurationFailureAnalyzer,\
org.springframework.boot.autoconfigure.session.NonUniqueSessionRepositoryFailureAnalyzer

# Template availability providers
org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider=\
org.springframework.boot.autoconfigure.freemarker.FreeMarkerTemplateAvailabilityProvider,\
org.springframework.boot.autoconfigure.mustache.MustacheTemplateAvailabilityProvider,\
org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAvailabilityProvider,\
org.springframework.boot.autoconfigure.thymeleaf.ThymeleafTemplateAvailabilityProvider,\
org.springframework.boot.autoconfigure.web.servlet.JspTemplateAvailabilityProvider

springboot 拡張ポイントの詳細な説明

参考:https://blog.csdn.net/fox9916/article/details/129101918

おすすめ

転載: blog.csdn.net/tian830937/article/details/132819632