このドキュメントは、各段階で関連する方法を網羅しているスプリングブートアプリケーションのbeanライフサイクルの包括的な実行順序を詳述しています。
フェーズ1:ブートストラップ(jvm&spring boot初期化)
public static void main(String[] args)
SpringApplication.run()
)SpringApplication.run()
application.properties
(関連方法:yml
、)ConfigurableEnvironment#setActiveProfiles()
PropertySourcesPropertyResolver#getProperty()
AnnotationConfigServletWebServerApplicationContext
(関連方法:AnnotationConfigApplicationContext
)SpringApplication#determineWebApplicationType()
META-INF/spring.factories
SpringFactoriesLoader#loadFactoryNames()
アプリケーションの実行リスナー:
SpringApplicationRunListeners
、ApplicationStartingEvent
)ApplicationEnvironmentPreparedEvent
SpringApplicationRunListeners#starting()
SpringApplicationRunListeners#environmentPrepared()
フェーズ2:コンテキストの初期化とビーンライフサイクルApplicationContext
が作成され、beansは@ComponentScan
や@Configuration
などの注釈を使用してスキャンされます。 (関連方法:AnnotationConfigApplicationContext#register()
)
BeanDefinitionRegistry#registerBeanDefinition()
InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation()
BeanNameAware
)が処理されます。 BeanFactoryAware
(関連方法:EnvironmentAware
、、BeanNameAware#setBeanName()
、BeanClassLoaderAware#setBeanClassLoader()
、BeanFactoryAware#setBeanFactory()
など)EnvironmentAware#setEnvironment()
EmbeddedValueResolverAware#setEmbeddedValueResolver()
@Conditional
、@Profile
)Condition#matches()
ConfigurableEnvironment#getActiveProfiles()
前向き化後処理:BeanPostProcessor#postProcessBeforeInitialization()
カスタム初期化ロジックは、@PostConstruct
(関連方法:InitializingBean.afterPropertiesSet()
、init-method
)@Bean
InitializingBean#afterPropertiesSet()
@PostConstruct
開始後のポスト処理:
ApplicationContext
ContextRefreshedEvent
は更新され、依存関係の噴射が完了しました。 が発射されます。 AbstractApplicationContext#refresh()
(関連方法:)ServletContextInitializer
Webアプリケーションの場合、組み込みサーバー(Tomcat、Jetty、Undertow)が起動してポートにバインドします。 WebApplicationInitializer
およびが実行されます(サーブレットベースのアプリの場合)。 ConfigurableWebServerApplicationContext#start()
(関連方法:)CommandLineRunner
beans実装ApplicationRunner
またはが実行され、スタートアップ後のタスクを実行します。 CommandLineRunner#run()
(関連方法:ApplicationRunner#run()
、)ApplicationReadyEvent
ApplicationListener#onApplicationEvent(ApplicationReadyEvent)
が起動され、アプリケーションが完全に初期化され、リクエストを処理する準備ができていることを示しています。 (関連方法:フェーズ4:Bean Destruction&Application Shutdown
spring.lifecycle.timeout-per-shutdown-phase
優雅なシャットダウン:シャットダウンプロセスが開始され、SpringApplication#setRegisterShutdownHook(true)
によって制御されます。 (関連方法:DestructionAwareBeanPostProcessor#postProcessBeforeDestruction()
処理前処理:DisposableBean.destroy()
カスタムクリーンアップ:@PreDestroy
カスタムクリーンアップロジックは、destroy-method
、@Bean
メソッド、またはアノテーションのDisposableBean#destroy()
属性を使用して実行されます。 @PreDestroy
(関連方法:、ApplicationContext
applicationContextクロージャー:ContextClosedEvent
閉鎖、ConfigurableApplicationContext#close()
を発射します。 (関連方法:SpringApplication.exit()
カスタム終了コード:ExitCodeGenerator
を使用して、カスタム終了コードを設定することができます(SpringApplication#exit()
を使用)。 (関連方法:フェーズ5:高度な考慮事項
@Lazy
豆は、アクセスしたときにのみ作成されます。 DefaultListableBeanFactory#setAllowBeanDefinitionOverriding(false)
@Lazy
を使用して円形の依存関係を管理します。 @DependsOn
(関連方法:)AbstractAutowireCapableBeanFactory#doResolveDependency()
FactoryBean#getObject()
HealthIndicator#health()
spring.main.lazy-initialization=true
カスタムアプリケーションリスナー(ApplicationListener
)
ApplicationListener#onApplicationEvent()
ブートストラップ:
SpringApplication.run()
コンテキストの初期化:以上がSpring-:spring-boot-application-bean-lifecycle-comprehinsive-execution-order-with related-methodsの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。