例えばビーンたBeanFactory単一の初期化処理(A)

日付10.06午後

ポイント

単一豆の実施形態の完全な初期たBeanFactory

beanFactory.preInstantiateSingletons()

  1. で(すべてのBean定義情報を取得beanDefinitionNamesトラバーサルリスト
  2. Bean定義情報を取得するには
  3. Beanが抽象的ではない場合、それは怠惰なロードされていないシングルトンであり、
  4. この豆FactoryBeanの(FactoryBeanのインタフェースを達成していない判定豆)は、その後、豆を作成するためにファクトリメソッドの内部で使用されているかどうかを決定します。

    • コールは、getbean(&beanname)たBeanFactoryオブジェクトを取得します。
  5. するために呼び出すgetBean(beanName)Beanを作成します
    • コール doGetBean()
    • transformedBeanNameプレフィックスを削除する前に、豆の工場に入ります。この方法では、正式な名前の別名に変わります
    • getSingleton単一インスタンス豆の検出部は、実施形態にキャッシュが構築されてきたが、この単一の実施形態Beanに直接返すあり

      /** Cache of singleton objects: bean name to bean instance. */
      private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256);
      この登録になりますシングルトンBeanを持っていたすべてのインスタンスは、検査は、作成プロセスには豆が存在しない現在の時間かどうかを判断します。いずれの場合には、なりますearlySingletonObjects取得するために行く、これはそれを取得していない場合は、に行きますsingletonFactoriesで取得するには、このマップ、取得した場合、削除singletonFactories、順番に、BeanをearlySingletonObjects内部にこのマップを登録します
    • (豆プロセスの作成を始める)Beanに取得していません
      • 最初に決定する次の私たちは、循環参照を避けるために、Beanのインスタンスを作成しています。
      • 親ビーン植物(Springmvc、そして親子の工場があるが存在する可能性がある場合、これは主に)親植物は、あなたがそれを得ることができれば、親植物未満を取得し、親植物の方法をdogetbean呼び出すために行くだろう取得、直接次のステップ
      • 現在のBeanが作成されているマークし、現在BEANNAMEはおそらく入れCollections.newSetFromMap(new ConcurrentHashMap<>(256))、数回は、シングルトンBeanを作成する際に、複数のスレッドを防ぐためにそこに
      • Bean定義情報を取得します。
      • 追加の豆豆を入手することがあれば、依存、またはそれらの依存Beanを構築するためにgetbean方法を呼び出します
      • BeanがシングルトンBeanがある場合は、バックオフcreateBean、シングルトンBeanを作成するために開始
        • Bean定義情報を取得します。
        • 分析定義情報を確認し、Beanタイプを定義したが、空たbeanClassではありません
        • Beanメソッドがオーバーライドされているかどうかを検出する、任意のビーンは、このメソッドをオーバーライドするために調製された(内部情報のビーン定義をもチェックmethodOverridesこのプロパティは、値を持ちません)
        • BeanPostProcessor早期の傍受をしましょうとプロキシオブジェクトを返しますresolveBeforeInstantiation()
          • 最初の定義情報によると、beforeInstantiationResolved何の初期化プロセスが存在しない決定する前に、このプロセッサには何も入力しないでください、と
          • この値は、アプリケーションによって定義され、現在の工場が既に有しているかを決定しないと判定されInstantiationAwareBeanPostProcessor、このプロセッサは、次に豆のターゲットクラスを取得し、次に呼び出すためにInstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation、呼び出し再び、前処理を起動し、値がある場合豆に戻りますapplyBeanPostProcessorsAfterInitializationポストプロセッサのBean定義情報と、その後beforeInstantiationResolvedBeanへのパラメータの割り当ては、Beanを返した後、返されました

https://github.com/fulln

おすすめ

転載: www.cnblogs.com/wzqshb/p/11774767.html
おすすめ