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

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

Mary-Kate Olsen
リリース: 2025-01-29 18:08:15
オリジナル
665 人が閲覧しました

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はこの方法を呼び出します。 使用法:
    • 実行時にクラスを動的にロードする場合。
public class MyBean implements BeanNameAware {
    @Override
    public void setBeanName(String name) {
        System.out.println("Bean Name Set: " + name);
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

  1. <置>set beanfactory BeanClassLoaderAware#setBeanClassLoader(ClassLoader classLoader)

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

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

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

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

  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利用可能<
  • Beanは完全に初期化されており、アプリケーションに使用できます。
<、> 2。破壊段階(ライフサイクルを閉じます)

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

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

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

      • DisposableBean destroy()
      • <定>custom
      method(優先方法)
public class MyBean implements BeanNameAware {
    @Override
    public void setBeanName(String name) {
        System.out.println("Bean Name Set: " + name);
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
    は<现>よりもモダンであり、
  1. beanが破壊される前に

    @PreDestroy

    • DisposableBean <定>custom
    >で定義されている場合)
public class MyBean implements BeanClassLoaderAware {
    @Override
    public void setBeanClassLoader(ClassLoader classLoader) {
        System.out.println("ClassLoader Set!");
    }
}
ログイン後にコピー
ログイン後にコピー
    ロジックのクリーニングの代替方法を定義します。
  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 までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート