ホームページ >Java >&#&チュートリアル >Spring-:Spring-Bean-Lifecycle-Execution-Order

Spring-:Spring-Bean-Lifecycle-Execution-Order

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-29 18:08:15596ブラウズ

spring-: spring-bean-lifecycle-execution-order この記事では、Beanの動作プロセスを完全に提示するためにBeanFactoryインターフェイスをカバーするすべての関連するライフサイクルインターフェイスと方法をカバーするSpring Beanのライフサイクルを包括的に分析します。

I.スプリングビーンライフサイクルロジック実行順序(インスタンス化から破壊まで)

(破壊に導かれた)

ビーン定義のロード(メタデータ処理)
  1. 構成ファイル(@configuration)、xmlファイルまたはコンポーネントスキャン(@component)

    bean定義を読み取ります。
    • これはメタデータの処理手順で、インスタンスは作成されていません。
    • 関連方法:
    • BeanDefinitionRegistry#registerBeanDefinition()
    インスタンス化(オブジェクトによって作成)
次の方法で実際のBeanオブジェクトを作成します。
建設的な関数はインスタンス化されています
  1. 工場メソッド

    • 関連方法:
      bean name
    • を設定します InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation() bean実装
    • の場合、springは
    メソッドを呼び出して、
  2. bean自身の名前を通知します

    これは、注入の前にの前に起こりました
  1. ユースケース:beanがアプリケーションのコンテキストでその名前を知る必要がある場合。 BeanNameAware#setBeanName(String name)

    • BeanNameAware setBeanName()
    • Bean Class Loaderを設定します
    • bean がクラスローダーにアクセスする必要がある場合、Springはこの方法を呼び出します。 使用法:
    • 実行時にクラスを動的にロードする場合。
<code class="language-java">public class MyBean implements BeanNameAware {
    @Override
    public void setBeanName(String name) {
        System.out.println("Bean Name Set: " + name);
    }
}</code>

  1. set beanfactory BeanClassLoaderAware#setBeanClassLoader(ClassLoader classLoader)

    • スプリング注入beanFactorybeanに。
    • ユースケース:プログラミングで他のbeanを取得します。
<code class="language-java">public class MyBean implements BeanClassLoaderAware {
    @Override
    public void setBeanClassLoader(ClassLoader classLoader) {
        System.out.println("ClassLoader Set!");
    }
}</code>

    環境を設定します
  1. BeanFactoryAware#setBeanFactory(BeanFactory factory) beanが

    環境変数と属性
      にアクセスする必要がある場合、この方法は呼び出されます。
    • ユースケース:の[
    • ]の動的にアクセスするために使用されます。
埋め込まれた値パーサーを設定します
<code class="language-java">public class MyBean implements BeanFactoryAware {
    @Override
    public void setBeanFactory(BeanFactory beanFactory) {
        System.out.println("BeanFactory Set!");
    }
}</code>

      許可されたbean
    • 配置の配置の分析($ {property})
    • 使用法:beanがプレースホルダーを手動で解析する必要がある場合が役立ちます。
    <code class="language-java">public class MyBean implements BeanNameAware {
        @Override
        public void setBeanName(String name) {
            System.out.println("Bean Name Set: " + name);
        }
    }</code>

    1. リソースローダーを設定します

      ResourceLoaderAware#setResourceLoader(ResourceLoader loader)

      動的読み込みリソースの場合のみ
        applicationContext
      • にのみ適用されます。 ユースケース:
      • ファイル、クラスパスリソース、または外部リソースの読み込み。

    アプリケーションイベントパブリッシャーを設定
    1. beanがイベントを公開する必要がある場合、この方法は呼び出されます。 ApplicationEventPublisherAware#setApplicationEventPublisher(ApplicationEventPublisher publisher)

      ユースケース:
        などのブロードキャストイベントに使用されます。
      • ContextRefreshedEventメッセージソースを設定します

    Beanが
      Internationalization(i18n)を必要として
    1. をサポートする必要がある場合、Springはメッセージを注入します。

      MessageSourceAware#setMessageSource(MessageSource source)

      • set applicationContext
      を設定します
    Beanが
      例:
    1. 他の豆、環境設定などへの動的アクセスを許可します。

      ApplicationContextAware#setApplicationContext(ApplicationContext ctx)

      • servertContext
      • を設定します Webアプリケーションにのみ適用できますWebコンテキスト情報
      • にアクセスするために使用されます。

    1. 初期化の前のプロセスのポストServletContextAware#setServletContext(ServletContext ctx)

      • beanの前に beanの前に許可されています。

    1. カスタマイズされた初期化

      BeanPostProcessor#postProcessBeforeInitialization()

      • custom method custom

    1. 初期化されたポストトリートメントの後、

        beanが初期化を許可します
      • 後でInitializingBeanbeanを変更します。 afterPropertiesSet()
      • 例:
      • プロキシ、ログレコード、または顔指向プログラミング(AOP)@PostConstructを作成するために使用されます。
      • @Bean init-method
    Bean利用可能
  1. Beanは完全に初期化されており、アプリケーションに使用できます。
  2. 2。破壊段階(ライフサイクルを閉じます)

    アプリケーションが閉じられている場合、春はエレガントになります破壊された豆

    破壊される前の治療
    1. 破壊の前に片付けることができますDestructionAwareBeanPostProcessor#postProcessBeforeDestruction()

      • method
    2. Beanが実装されている場合、DisposableBeanが呼び出されます。 destroy()

      • DisposableBean destroy()
      • custom
      method(優先方法)
    <code class="language-java">public class MyBean implements BeanNameAware {
        @Override
        public void setBeanName(String name) {
            System.out.println("Bean Name Set: " + name);
        }
    }</code>
      はよりもモダンであり、
    1. beanが破壊される前に

      @PreDestroy

      • DisposableBean custom
      >で定義されている場合)
    <code class="language-java">public class MyBean implements BeanClassLoaderAware {
        @Override
        public void setBeanClassLoader(ClassLoader classLoader) {
            System.out.println("ClassLoader Set!");
        }
    }</code>
      ロジックのクリーニングの代替方法を定義します。
    1. destroy-method @Bean 3、完全なプロセスの概要(最終順序)

      • bean初期化ステージ
    2. bean定義をロード

    インスタンス化されたBean(

    1. new Bean()
    2. setBeanName() BeanNameAware
    3. setBeanClassLoader()BeanClassLoaderAware
    4. setBeanFactory()BeanFactoryAware
    5. setEnvironment() EnvironmentAware
    6. setEmbeddedValueResolver()EmbeddedValueResolverAware
    7. /setResourceLoader()ResourceLoaderAware
    8. setApplicationEventPublisher() ApplicationEventPublisherAware Bean利用可能
    9. setMessageSource() Beanの破壊段階MessageSourceAware
    10. setApplicationContext() ApplicationContextAware
    11. setServletContext() ServletContextAware
    12. postProcessBeforeInitialization() BeanPostProcessor
    13. インターフェイスと方法の詳細については、
    14. https://www.php.cn/link/6759d0996526ddc8e27aa550f0b806b1@PostConstructafterPropertiesSet()
    15. 幸せなコーディングをお祈りします! ?

    以上がSpring-:Spring-Bean-Lifecycle-Execution-Orderの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。