SpringのいくつかのPostProcessorの違いと連絡

3274 ワード

まずビーンのライフサイクルを明確にします.
  • は、まずビーンの定義情報を登録する.
  • は、ビーンの例を作成する.
  • は最後にビーンを初期化し、容器に入れる.
  • 実行する順序によって、以下のステップに分けられます.
    BeanDefinitionRegistryPostProcessor      Bean         ;
    BeanFactoryPostProcessor      Bean     ;
    BeanPostProcessor       Bean     ;
    
    BeanDefinitionRegistryPostProcessorBeanFactoryPostProcessorのサブクラスであるので、前者を使用して後者の代わりに機能を実装することができる.
    IOC容器作成時の呼び出しの流れを確認します.refresh方法のコードは以下の通りです.
    // Allows post-processing of the bean factory in context subclasses.
    postProcessBeanFactory(beanFactory);
    // Invoke factory processors registered as beans in the context.
    invokeBeanFactoryPostProcessors(beanFactory);
    // Register bean processors that intercept bean creation.
    registerBeanPostProcessors(beanFactory);
    // Initialize message source for this context.
    initMessageSource();
    // Initialize event multicaster for this context.
    initApplicationEventMulticaster();
    // Initialize other special beans in specific context subclasses.
    onRefresh();
    // Check for listener beans and register them.
    registerListeners();
    // Instantiate all remaining (non-lazy-init) singletons.
    finishBeanFactoryInitialization(beanFactory);
    // Last step: publish corresponding event.
    finishRefresh();
    
    invokeBeanFactoryPostProcessorsは、登録定義情報とビーンを作成する方法を実行する.finishBeanFactoryInitializationは、ビーンを初期化する方法を実行する.
    具体的な実行の順序はみんな自分で調整を中断することができます.ソースが多すぎるため、ここではもう展示しません.