スプリングソースコード解析(A) - Springコンテナリフレッシュ

リフレッシュ();コンテナをリフレッシュ、プラスロック
)1 prepareRefreshを(;容器更新する準備ができて
  1.1変性状態(リフレッシュ時間コンテナを、コンテナ、コンテナアクティブ状態閉)
  1.2初期化プロパティリソース(サブクラスによって達成空の実装)
  環境を初期化するために1.3資源(環境)、および必要なパラメータをチェック
  1.4は、ブロードキャスト・コールの初期化後に、プッシュイベントを初期化する前に、イベントのアプリケーション放送(ApplicationEventMulticaster)を記録するため、早期に(earlyApplicationEvents)のイベントのセットを定義
2 obtainFreshBeanFactory();たBeanFactoryを取得
  refreshBeanFactory 2.1()
    たBeanFactory作成2.1.1
    2.1.2リフレッシュ状態がリフレッシュ変更
    2.1.3シリアル番号が提供
  2.2戻ったBeanFactoryを
3 prepareBeanFactory(たBeanFactory);たBeanFactory初期化
  3.1クラスローダが提供
  3.2 SPEL式パーサー(SpelExpressionParser)に配置された
  配置3.3リソースエディタ(ResourceEditorRegistrar)
  3.4 ApplicationContextAwareProcessorビーンは、ビーンAwareのインターフェイスを処理するためのポストプロセッサを増加しました
    EnvironmentAware環境データは、環境に関する情報の取得のために、と、
      文字列式を処理するために表現パーサーEmbeddedValueResolverAwareを。例えば、「$ {spring.redis.port:6379}」
      リソースデータ読み出し用ResourceLoaderAwareリソースローダ
      プッシュイベント(ApplicationEvent)ためApplicationEventPublisherAwareアプリケーションイベントプッシャーを
      国際化リソース獲得モジュールのためMessageSourceAware
      ApplicationContextAware容器、容器を得るために
  ポストプロセッサApplicationContextAwareProcessorされた3.5無視ビーン自動組立インターフェース、
  3.6自動組立ルールビーン(対応関係)を提供し、アセンブリ豆中に提供クラスは、所望の
    (beanFactory.registerResolvableDependencyを; ApplicationContext.class、この)
    @Autowired容器、すなわちこの電流コンテナ注入:例えば
       、専用のApplicationContextのApplicationContext
  3.7ビーンポストプロセッサApplicationListenerDetector、ApplicationEventインタフェースの実装クラスを処理するために、これらのクラスは、容器とイベントブロードキャストに登録されて登録をリアクター
  3.8登録ビーンポストプロセッサLoadTimeWeaverAwareProcessorに、クラス名前含まloadTimeWeaverは、治療豆LoadTimeWeaverAwareインターフェイスに使用され、一時的なクラスローダContextTypeMatchClassLoader設定されている場合
  3.9登録血管ビーン(環境、systemProperties、systemEnvironment)を
。4 postProcessBeanFactory(たBeanFactory );たBeanFactoryポスト初期化イベント(実装するサブクラスの空の実装)
5 invokeBeanFactoryPostProcessors(たBeanFactory);たBeanFactoryの後処理を実行する。
  注:たBeanFactory後処理2種類がありますBeanDefinitionRegistryPostProcessorとBeanFactoryPostProcessor
  5.1 PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(たBeanFactoryが、 getBeanFactoryPostProcessors());
    getBeanFactoryPostProcessors()は、手動でデフォルトで空たBeanFactoryポストプロセッサを注入します
    プロセッサタイプがBeanDefinitionRegistryPostProcessor postProcessBeanDefinitionRegistry法(BeanDefinitionRegistryレジストリ)が行われた場合5.1.1たBeanFactory後処理手動注射を取得
    5.1.2 BeanDefinitionRegistryPostProcessorが容器からポストプロセッサのすべてのタイプを取得し、PriorityOrdered-> Ordered-に従って> NonOrdered実行の順序
    手動タイプを実行するため5.1.3ポスト注入BeanFactoryPostProcessorプロセッサ、postProcessBeanFactory(ConfigurableListableBeanFactoryたBeanFactory)メソッドを呼び出す
    順序> 5.1.4 BeanFactoryPostProcessorが容器からポストプロセッサのすべてのタイプを取得し、PriorityOrdered-に従って- >実行順序はNonOrdered
  クラスを手動たBeanFactoryポストプロセッサを登録することができるので、操作を繰り返すが、3.8ステップ、が再びloadTimeWeaverというクラス、任意のポストプロセッサはLoadTimeWeaverAwareProcessorを登録するかどうかを判断し、一時的に設定し、5.2クラスローダContextTypeMatchClassLoader
6 registerBeanPostProcessors(たBeanFactory);豆のポストレジスタ
  6.1順序付きコンテナ、PriorityOrdered分類プロセッサからポストプロセッサBeanPostProcessorのすべてのタイプを取得し、内部、NonOrdered
    応じPriorityOrdered-> Ordered-> NonOrdered->内部系列順に登録されたポストプロセッサビーン
  6.2 Beanの再登録ポストプロセッサApplicationListenerDetectorは、最後に、最初の登録にプロセッサが3.7参照
7 initMessageSourceを();初期化国際資源クラス
  messageSourceという名前の容器があるかどうかの7.1ビーンの解釈
  場合、もしあれば、それを初期化するために、7.2をHierarchicalMessageSourceは、インターフェイスを実装し、親MessageSource親注入内部MessageSource得、存在しない
  、7.3ない場合、初期化DelegatingMessageSourceを親MessageSourceの内部を設定するために、容器の春に注入
)8 initApplicationEventMulticaster(、アプリケーションの初期化イベントイベントのディスパッチのための放送局
  8.1はapplicationEventMulticasterコンテナビーンが呼び出されるかどうかを決定するために
  、それを初期化するために、任意の場合は、8.2を
  SimpleApplicationEventMulticを初期化し、ない場合には8.3を ASTER、及び容器春に注入
9 onRefresh();(サブクラスのために達成するために空の実装)リフレッシュイベント
10 registerListenersは(); ApplicationListener登録
  ステップ8で作成された、アプリケーションイベント放送局(ApplicationEventMulticaster)を取得10.1
  順番にApplicationEventMulticasterに注入されるApplicationListenerの手動登録、取得10.2
  順番にApplicationEventMulticasterに注入される全てApplicationListenerは、容器取得10.3
  10.4取得した初期アプリケーションイベント収集ステップ1.4は、(前のイベントに容器を通して押さ場合、セットに格納される)定義されたローカル変数への最初のデータ・キャッシュ、およびNULLに設定されている割り当て、NULLがに割り当てられていますプッシュイベントを防ぐために、まだ(コレクションがNULLであるかどうかに基づいて判断)コレクションに格納されています。
  ターンコールonApplicationEvent 10.5 ApplicationEventMulticaster ApplicationListener(Eイベント)インタフェース
11 finishBeanFactoryInitialization(たBeanFactory);豆のすべての非シングルトン初期遅延ローディング
  容器に含まれている場合11.1 ConversionServiceを、のBeanFacotry ConversionServiceの設定値
  11.2コンテナを表現パーサーを設けられていませんEmbeddedValueResolverAware、表現パーサーの初期化コンテナ、デフォルトStringValueResolver
  11.3初期化ビーンLoadTimeWeaverAwareインターフェース
  11.4空の一時的なクラスローダ、3.8と5.2の値が設定されます
  configurationFrozen = trueを設定さ11.5凍結を、あなたは)getBeanNamesForTypeを(呼び出すときに、値を決定する、Ruoyi凍結はキャッシュ内の情報を取得します。
  11.6シングルトン遅延読み込み豆の非初期化
    すべての記述ビーン、ビーン通じ11.6.1サイクル非抽象、シングルトンであれば、非遅延読み込み、それが作成される
    BeanのインタフェースFactoryBeanの実装している場合11.6.2を
      11.6.2.1コールをgetBean ( "$" +のbeanName)メソッド
      11.6.2.2 BeanのインターフェースとSmartFactoryBean isEagerInitを(実装するかどうかを決定する)がtrueを返す、getBean(のbeanName)への呼び出し
      豆FactoryBeanのは、インタフェース実装していない場合11.6.3は
        、コールgetBean(のbeanName)を、getBeanメソッドを実装しました後続の補助
  ビーンコールインターフェースSmartInitializingSingleton afterSingletonsInstantiated()メソッドかどうかを確認するために、順次実施される場合、すべての非遅延シングルトンローディングが完了した初期化11.7後
12 finishRefresh();完全なリフレッシュ
  12.1ライフサイクル初期化プロセッサLifecycleProcessor、コンテナの初期化中に存在する場合、そうでない場合は、デフォルトDefaultLifecycleProcessor設定
  onRefreshの12.2通話LifecycleProcessor()メソッドを
  12.3は、コンテナ完全リフレッシュイベントに推進
13 resetCommonCachesを();キャッシュのすべての種類を削除します




おすすめ

転載: www.cnblogs.com/zhuqianchang/p/11413594.html