ホームページ > Java > &#&チュートリアル > Spring-:spring-boot-application-bean-lifecycle-comprehinsive-execution-order-with related-methods

Spring-:spring-boot-application-bean-lifecycle-comprehinsive-execution-order-with related-methods

Patricia Arquette
リリース: 2025-01-29 20:06:13
オリジナル
523 人が閲覧しました

spring-: spring-boot-application-bean-lifecycle-comprehensive-execution-order-with-related-methods

このドキュメントは、各段階で関連する方法を網羅しているスプリングブートアプリケーションのbeanライフサイクルの包括的な実行順序を詳述しています。

フェーズ1:ブートストラップ(jvm&spring boot初期化)

  1. jvm初期化:Java仮想マシン(jvm)は、メインアプリケーションクラス(を含む)を開始およびロードします。 public static void main(String[] args)
  2. springApplicationの実行:
  3. アプリケーションコンテキストの作成を開始します。 (関連方法:SpringApplication.run()SpringApplication.run()
  4. 環境構成:
  5. アプリケーションは、システムのプロパティ、環境変数、/ファイル、およびコマンドライン引数から設定をロードします。アクティブプロファイルとデフォルトプロファイルが決定されます。 application.properties(関連方法:ymlConfigurableEnvironment#setActiveProfiles()PropertySourcesPropertyResolver#getProperty()
  6. アプリケーションタイプの決定:
  7. スプリングは、アプリケーションタイプ(Webまたは非Web)を識別します。 これにより、適切なアプリケーションコンテキストが決定されます:(Web)または(非Web)。 AnnotationConfigServletWebServerApplicationContext(関連方法:AnnotationConfigApplicationContextSpringApplication#determineWebApplicationType()
  8. Auto-configuration&springFactoriesLoader: Springは、ClassPathで見つかった依存関係を自動的に登録します()。
  9. (関連方法:META-INF/spring.factories SpringFactoriesLoader#loadFactoryNames()アプリケーションの実行リスナー:
  10. がトリガーされ、
  11. などのイベントが発生します。 (関連方法:SpringApplicationRunListenersApplicationStartingEventApplicationEnvironmentPreparedEvent SpringApplicationRunListeners#starting() SpringApplicationRunListeners#environmentPrepared()フェーズ2:コンテキストの初期化とビーンライフサイクル
  1. applicationContextの作成:ApplicationContextが作成され、beansは@ComponentScan@Configurationなどの注釈を使用してスキャンされます。 (関連方法:AnnotationConfigApplicationContext#register()
  2. Bean定義の読み込み: Spring Processは、構成クラス、XMLファイル、またはコンポーネントスキャンからのBean定義をプロセスします。 注:Beanインスタンスはまだではありません。まだ作成されていません。 (関連方法:BeanDefinitionRegistry#registerBeanDefinition()
  3. 豆のインスタンス化:
  4. 豆は、コンストラクターインジェクションまたは工場の方法を使用してインスタンス化されます。 (関連方法:InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation()
  5. ライフサイクル認識Bean処理:
  6. ライフサイクルインターフェイスの実装(BeanNameAware)が処理されます。 BeanFactoryAware(関連方法:EnvironmentAwareBeanNameAware#setBeanName()BeanClassLoaderAware#setBeanClassLoader()BeanFactoryAware#setBeanFactory()など)EnvironmentAware#setEnvironment()EmbeddedValueResolverAware#setEmbeddedValueResolver()
  7. 条件付き豆とプロファイル:
  8. またはでマークされた豆は、指定された条件またはアクティブプロファイルに基づいて評価および条件付きで作成されます。 (関連方法:@Conditional@ProfileCondition#matches() ConfigurableEnvironment#getActiveProfiles()前向き化後処理:
  9. メソッドが実行されます カスタム初期化:BeanPostProcessor#postProcessBeforeInitialization()カスタム初期化ロジックは、
  10. 、またはアノテーションの属性を使用して実行されます。 @PostConstruct(関連方法:InitializingBean.afterPropertiesSet()init-method@Bean InitializingBean#afterPropertiesSet()@PostConstruct開始後のポスト処理:
  11. メソッドが実行されます
  12. フェーズ3:アプリケーションスタートアップの完了
  13. applicationContextの更新:ApplicationContextContextRefreshedEventは更新され、依存関係の噴射が完了しました。 が発射されます。 AbstractApplicationContext#refresh()(関連方法:
  14. 埋め込みWebサーバーの開始(該当する場合):ServletContextInitializer Webアプリケーションの場合、組み込みサーバー(Tomcat、Jetty、Undertow)が起動してポートにバインドします。 WebApplicationInitializerおよびが実行されます(サーブレットベースのアプリの場合)。 ConfigurableWebServerApplicationContext#start()(関連方法:
  15. CommandLinerunner&ApplicationRunnerの実行:CommandLineRunnerbeans実装ApplicationRunnerまたはが実行され、スタートアップ後のタスクを実行します。 CommandLineRunner#run()(関連方法:ApplicationRunner#run()
  16. applicationReadyEvent:ApplicationReadyEventApplicationListener#onApplicationEvent(ApplicationReadyEvent)が起動され、アプリケーションが完全に初期化され、リクエストを処理する準備ができていることを示しています。 (関連方法:

フェーズ4:Bean Destruction&Application Shutdown
  1. spring.lifecycle.timeout-per-shutdown-phase優雅なシャットダウン:シャットダウンプロセスが開始され、SpringApplication#setRegisterShutdownHook(true)によって制御されます。 (関連方法:
  2. DestructionAwareBeanPostProcessor#postProcessBeforeDestruction()処理前処理:
  3. メソッドが実行されます。 DisposableBean.destroy()カスタムクリーンアップ:@PreDestroyカスタムクリーンアップロジックは、destroy-method@Beanメソッド、またはアノテーションのDisposableBean#destroy()属性を使用して実行されます。 @PreDestroy(関連方法:
  4. ApplicationContextapplicationContextクロージャー:ContextClosedEvent閉鎖、ConfigurableApplicationContext#close()を発射します。 (関連方法:
  5. SpringApplication.exit()カスタム終了コード:ExitCodeGeneratorを使用して、カスタム終了コードを設定することができます(SpringApplication#exit()を使用)。 (関連方法:

フェーズ5:高度な考慮事項
  • Lazy Initialization():@Lazy豆は、アクセスしたときにのみ作成されます。 (関連方法:DefaultListableBeanFactory#setAllowBeanDefinitionOverriding(false)
  • 円形依存関係の取り扱い:、セッターインジェクション、または@Lazyを使用して円形の依存関係を管理します。 @DependsOn(関連方法:AbstractAutowireCapableBeanFactory#doResolveDependency()
  • FactoryBeanメカニズム:動的な豆の作成を許可します。 (関連方法:FactoryBean#getObject()
  • Spring Boot Actuator(有効化の場合):監視と管理(/アクチュエータ/ヘルス、/アクチュエータ/シャットダウン、/アクチュエータ/メトリック)のエンドポイントを提供します。 (関連方法:HealthIndicator#health()
  • パフォーマンスの最適化:スタートアップ時間を短縮し、ガベージコレクションを調整します。 spring.main.lazy-initialization=trueカスタムアプリケーションリスナー(
  • ):
  • スタートアップ/シャットダウンイベントに接続できます。 (関連方法:ApplicationListener ApplicationListener#onApplicationEvent()
  • 実行命令の概要:

    ブートストラップ:
      jvm→
    1. →auto configuration→コンテキスト作成 SpringApplication.run()コンテキストの初期化:
    2. Beanインスタンス化→ライフサイクルフック→依存噴射
    3. アプリケーションスタートアップ:
    4. Webサーバーの起動→Runners Execute→Application Ready
    5. シャットダウンフェーズ:
    6. 事前破壊コールバック→クリーンアップ→コンテキストは
    7. >を閉じます この詳細な内訳は、Spring Boot Bean Lifecycleとその実行命令の包括的な理解を提供します。 この注文を理解することは、スプリングブートアプリケーションのデバッグ、最適化、拡張に不可欠です。

    以上がSpring-:spring-boot-application-bean-lifecycle-comprehinsive-execution-order-with related-methodsの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    ソース:php.cn
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    著者別の最新記事
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート