スプリングアノテーション駆動開発(6)-----スプリングコンテナは[ソース]を生成します

Springコンテナをリフレッシュ()のリフレッシュを[作成]

1、prepareRefresh()リフレッシュ前処理

1)、いくつかのプロパティを初期化するinitPropertySources();プロパティパーソナライズアプローチサブクラスカスタム;
2)、GetEnvironment関数()validateRequiredProperties();.法的検査性等
3)、earlyApplicationEvents =新しいLinkedHashSetの< ApplicationEvent>() ;コンテナの初期イベントの一部を保存します。

2、obtainFreshBeanFactory();たBeanFactoryを得ます。

1)、refreshBeanFactory()は、リフレッシュたBeanFactoryを[作成];
)(this.beanFactory =新しいDefaultListableBeanFactoryを作成し;上記IDを述べ設定
2)、getBeanFactoryは();たBeanFactoryオブジェクトがちょうどGenericApplicationContext作成された戻り
3)、作成したBeanFactory []戻りDefaultListableBeanFactory。

3、prepareBeanFactory(たBeanFactory);たBeanFactory事前準備(たBeanFactoryいくつかの設定)。

1)、クラスローダがたBeanFactory支持表現パーサーを提供しています...
2)、加算部BeanPostProcessor] [ApplicationContextAwareProcessor
3)、インタフェース提供EnvironmentAware自動組立が無視できる、EmbeddedValueResolverAware、XXXと、
4)、レジスタを解決することができアセンブリを自動化、我々は直接、任意の構成要素に自動的に注入することができる:たBeanFactory、ResourceLoader、ApplicationEventPublisher、ApplicationContextの
5)、追加BeanPostProcessor] [ApplicationListenerDetector
6)、AspectJのコンパイル時間を追加する;
7)、いくつかの構成要素が使用可能たBeanFactoryを登録します。
ConfigurableEnvironment [環境]、systemProperties [地図<文字列、オブジェクト>]、systemEnvironment [地図<文字列、オブジェクト>]

4、postProcessBeanFactory(たBeanFactory)

たBeanFactoryの準備が完了した後に行う後処理;

1)、サブクラスによってさらに設定が完了した後たBeanFactoryと事前準備を作成するには、このメソッドをオーバーライド
上記======================たBeanFactoryを作成することですそして、事前準備==================================

BeanFactoryPostProcessorを行う5、invokeBeanFactoryPostProcessors(たBeanFactory)-----方法

BeanFactoryPostProcessor:たBeanFactoryポストプロセッサ。たBeanFactoryは、標準的な初期化の後に行われる、
二つのインターフェース:BeanFactoryPostProcessor、BeanDefinitionRegistryPostProcessor

1)BeanFactoryPostProcessorを行う方法。    

最初の実装BeanDefinitionRegistryPostProcessor
    1)、全てBeanDefinitionRegistryPostProcessorを取得する;
    2)、達成BeanDefinitionRegistryPostProcessor PriorityOrderedインターフェイス、の優先行わ参照
     postProcessor.postProcessBeanDefinitionRegistry(レジストリ)
    。3)、BeanDefinitionRegistryPostProcessorインターフェイスを順序付け達成するために行う。
        postProcessor.postProcessBeanDefinitionRegistry(レジストリ)
    4)、そして最終的に優先順位又はBeanDefinitionRegistryPostProcessorsインタフェースの任意の順序を実装していない行う。
     postProcessor.postProcessBeanDefinitionRegistry(レジストリ)

2)、この方法を実行BeanFactoryPostProcessor

  1)全てBeanFactoryPostProcessor得
  2)、達成BeanFactoryPostProcessor PriorityOrderedは、インタフェースの優先を行う参照
      postProcessor.postProcessBeanFactory()
  3)、BeanFactoryPostProcessorを達成するために行わインターフェースを順序付け;
      postProcessor.postProcessBeanFactory()
  。4)、最後に実行優先またはBeanFactoryPostProcessorインタフェースの任意の順序を実装していない;
      postProcessor.postProcessBeanFactory()

6、registerBeanPostProcessors(たBeanFactory)-----登録BeanPostProcessor(ビーンポストプロセッサ)[切片豆の作成]

異なるインターフェイスタイプBeanPostProcessor;ビーンが同じではありません前と後に実行するための機会を作成
BeanPostProcessor、DestructionAwareBeanPostProcessor、InstantiationAwareBeanPostProcessor、SmartInstantiationAwareBeanPostProcessor、 MergedBeanDefinitionPostProcessorは[internalPostProcessors]、
デフォルトで後処理PriorityOrderedを通じて、インタフェースを発注; 1)、BeanPostProcessorの全てを取得優先実行
2)、第一優先順位がPriorityOrdered BeanPostProcessorインタフェースを登録する;各BeanPostProcessorに;たBeanFactory beanFactory.addBeanPostProcessor(ポストプロセッサ)に添加し、
3)、次いで順序登録インタフェース
4)、そして最終的に任意の優先度レジスタなしで達成インターフェース
5)、最終登録MergedBeanDefinitionPostProcessor;
6)、ApplicationListenerDetectorを登録する;それはapplicationContext.addApplicationListener((ApplicationListener)豆であれば、ApplicationListenerか否かを確認した後、完全なBeanを作成します)< ?>。

7、initMessageSource();初期化MessageSourceアセンブリ(国際化機能を実行し、結合メッセージ、メッセージ解析)

1)たBeanFactory得るため
messageSource IDコンテナ参照がある場合2)、タイプはMessageSource成分であるDelegatingMessageSourceを作成するための独自のない場合に存在が、messageSourceに割り当てられている場合。

MessageSource:キー国際プロファイルの値をとり、領域情報に基づいて取得することができる;
3)、国際プロファイルの値を得た後、容器に登録良いMessageSourceを作成するために、それらは自動的にMessageSourceを注入することができます。

beanFactory.registerSingleton(MESSAGE_SOURCE_BEAN_NAME、this.messageSource)。

MessageSource.getMessage(文字コードは、[]引数、文字列defaultMessage、ロケールロケールオブジェクト)。

8、initApplicationEventMulticaster();イベントディスパッチャを初期化します。

1)、得たBeanFactory
ApplicationEventMulticasterのたBeanFactory applicationEventMulticasterから取得した2)、
3)、前のステップが構成されていない場合、SimpleApplicationEventMulticasterを作成する
。4)、作成ApplicationEventMulticaster直接自動注射器の他の構成要素の後、たBeanFactoryに添加しました

9、onRefresh();左サブタンク(サブクラス)

1、サブクラスは容器リフレッシュロジックをカスタマイズすることができ、このメソッドをオーバーライド。

10、registerListeners()に登録されている容器ApplicationListener内のすべての項目のために、

図1に示すように、容器から全てApplicationListener取得する
イベントディスパッチャの各リスナーに追加して、2、
。GetApplicationEventMulticaster()addApplicationListenerBean(listenerBeanName)
。3、イベント分布を生成するステップの前に。

11、finishBeanFactoryInitialization(たBeanFactory);豆の残りのすべての単一のインスタンスを初期化します。

1、beanFactory.preInstantiateSingletons();初期化単一インスタンスの後にBeanを残り
  1)、オブジェクト初期化して作成するすべての豆容器を順次取得
  )2を、定義情報豆を取得し、RootBeanDefinition
  。3)、ない抽象豆、単一のインスタンスではなく、遅延ロードされ;
    1)、FactoryBeanのか否かを判断する。インターフェースはFactoryBeanのビーン実装されている場合、
    2)、ビーン植物ではありません。getBean(のbeanName)を使用して、オブジェクトを作成
        0、getBean(のbeanName); ioc.getBean();
        1、doGetBean(名前、NULL、NULL、偽に)、
        単一インスタンス・ビーンを取得するために、キャッシュに格納されている2、。あなたは説明して得ることができる場合を介して作成された(豆の単一インスタンス上で作成されたすべてがキャッシュされます)豆の前に
        民間最終地図<文字列、オブジェクト>から singletonObjectsは=新しいConcurrentHashMapの<文字列、オブジェクト>(256); の取得
        3、キャッシュ未満を取得する、プロセスは、Beanのオブジェクトを作成し始め、
        図4に示すように、現在の豆マークするために作成された
        、5、定義情報豆を取得
        現在依存追加豆Beanの6、[;従うgetBeanは(存在する場合)に依存するBeanをそれを作成します。]
        7、豆作成プロセスの単一のインスタンスを起動する;
        1)、たcreateBean(のbeanName、MBD、引数);
        2)、オブジェクトビーン= resolveBeforeInstantiation(のbeanName、mbdToUse); BeanPostProcessor第インターセプトリターンプロキシはせ
          [InstantiationAwareBeanPostProcessor]:事前に実行。
            最初のトリガ:postProcessBeforeInstantiation();
            戻り値がある場合:トリガpostProcessAfterInitializationは();
        3)、前InstantiationAwareBeanPostProcessorはプロキシを返さない場合は、4を呼び出す)
        4)、beanInstance = doCreateBean(のbeanName、mbdToUse、引数の)オブジェクト、豆作成
            1 )、[] Beanインスタンス作成、createBeanInstance(のbeanName、MBD、引数 );
               コンストラクタまたはオブジェクトBeanインスタンスを作成するためにファクトリメソッドを使用して、
            2)、applyMergedBeanDefinitionPostProcessors(MBD、BeanType、のbeanName)。
             コールMergedBeanDefinitionPostProcessor postProcessMergedBeanDefinition(MBD、BeanType、のbeanName);
            3)、[]属性割り当てビーンpopulateBean(のbeanName、MBD、instanceWrapper) ;
              前割り当てた:
              1)、ポストプロセッサInstantiationAwareBeanPostProcessorを取得する;
                  postProcessAfterInstantiation();
              2) ;ポストプロセッサを取得InstantiationAwareBeanPostProcessor
                  ; postProcessPropertyValues()
                  ===:=====割り当て前
              3)、アプリケーションの値がビーン属性、セッターメソッドを使用して属性を割り当てる。
                  applyPropertyValues(のbeanName、MBD、BW、PVS );
            4)、[]に初期化ビーンinitializeBean(のbeanName、exposedObject、MBD) 。
              1)、[]インタフェースメソッドが認識invokeAwareMethods(のbeanName、豆)を行う; xxxAwareインターフェース方法を行う
                 BeanNameAware \ BeanClassLoaderAware \ BeanFactoryAware
              後処理[]初期化applyBeanPostProcessorsBeforeInitialization(wrappedBean、のbeanName)を実行する前に、2);
                 BeanPostProcessor.postProcessBeforeInitialization() ;
              3)、[初期化方法を実行する] invokeInitMethods(のbeanName、wrappedBean、MBD)
                 。1)、それはInitializingBeanインタフェースを実装しているかどうかを、定義された初期化が実行されるインターフェース、
                 2)、カスタム初期化方法かどうか;
              4)、[反対を行った後プロセッサは、初期化後] applyBeanPostProcessorsAfterInitialization
                 BeanPostProcessor.postProcessAfterInitialization();
            5)、登録豆の破壊の方法;
        5)、ビーンキャッシュsingletonObjectsに追加作成します。
            IoCコンテナは地図であり、シングル・インスタンス・ビーン、環境情報の多くを保持している地図。;
            ;作成されたすべてのgetBean後に豆を利用する
            全てのビーンがSmartInitializingSingletonインタフェースで検査し、それがある場合は、afterSingletonsInstantiatedの実装に();

12、finishRefresh();たBeanFactoryワークを作成するための初期化を完了し、IOCコンテナは完全作成します。

1)、initLifecycleProcessor();ポストプロセッサの初期化とライフサイクルに関連する; LifecycleProcessorの
デフォルトは、かどうかが容器からlifecycleProcessor成分] [LifecycleProcessorを見つけるために、新しいDefaultLifecycleProcessorが(存在しない場合)は、
容器に加え、
LifecycleProcessor実装クラスを記述します、たBeanFactoryであってもよい
)空隙OnRefresh(;
; OnCloseの()無効
2)、getLifecycleProcessor()OnRefresh();.
以前に定義されてしまったライフサイクル・プロセッサ(たBeanFactory)を、コールバックOnRefresh();
3)、publishEvent(新しい新しいContextRefreshedEvent (本));公開の更新は、完全なコンテナイベントである;
4)、liveBeansView.registerApplicationContext(本)

====== ===========概要

; 1)、春のコンテナは、起動時に、最初は定義情報豆、すべての登録の着信救う
    の<bean>; 1)、XML登録豆
    豆登録2)、注意事項を、サービス@、コンポーネント@、豆@、XXX
2 )、春のコンテナが作成する適切な時期になり、これらの豆
    1)、ビーンで使用される場合、後の容器に格納されて作成され; getBeanは、Beanを使用して作成した
    作成の2)、統一すべての残り場合ビーン; finishBeanFactoryInitialization() ;
    3)、ポストプロセッサ; BeanPostProcessor
     1)、各Beanが作成され、プロセッサは、後処理の様々な使用であろう。ビーン拡張機能;
         AutowiredAnnotationBeanPostProcessor:自動注入プロセス
         AnnotationAwareAspectJAutoProxyCreator:AOP機能を行い、
         XXX。 ...
        拡張機能ノート:
           AsyncAnnotationBeanPostProcessor
        ....
4)、イベント駆動型モデル;
    ApplicationListener;イベントリスナー;
    ApplicationEventMulticaster、イベントディスパッチ:

おすすめ

転載: www.cnblogs.com/alimayun/p/11123836.html