豆のインスタンスで春

キャッシュ1.。最初のレベルのキャッシュから優先順位を取り、そこに返されます。、二次キャッシュから取得していない場合は、そこに返されます。あなたは二次キャッシュを得ることができない場合は、次の3つのキャッシュは二次キャッシュに移動、削除された3レベルのキャッシュから、取得するには、取得します。

何の3レベルのキャッシュが存在しない場合は、nullが返されます。

実施形態は単一モードである場合、プロセスたcreateBean行く2. Beanオブジェクトがインスタンス化を行いました。

  beanDefinitionに対応する取得されたバイトコードオブジェクト2.1。

 2.2 prepareMethodOverrides。各オブジェクトmethodOverrideチェックbeanDefinitionオブジェクト。オブジェクトが一つだけfalseに同じ名前のセットのに対応する方法がある場合は、デフォルトではtrueに設定されています。

 2.3 doCreateBean呼び出し方法、プロセスの具体例。

3。 

 3.1単一の実施形態た場合、キャッシュマメ植物からBeanインスタンスは、オブジェクトを取得しました。

IF(mbd.isSingleton()){ 
instanceWrapper = this.factoryBeanInstanceCache.remove(のbeanName);
}
3.2取得作成インスタンスが空いている場合、Beanオブジェクト。コールcreateBeanInstance
IF(instanceWrapper == NULL){ 
//、焦点に,,重要:. 5度外観をインスタンスを作成
instanceWrapper = createBeanInstance(のbeanName、MBD、引数を);
}

3.3 FactoryMethodNameが属性場合、オブジェクトはfactorymethodの実施例の方法により行われます。
IF(!mbd.getFactoryMethodName()= NULL){ 
リターンinstantiateUsingFactoryMethod(のbeanName、MBD、引数);
}

3.4そうでない場合、
現在インスタンス化されたBeanが@Autowiredた見つける注釈コンストラクタ
//コールタイプbeanpostProcess.determineCandidateConstructors SmartInstantiationAwareBeanPostProcessor取得価額と注釈付きコンストラクタがautowired。
コンストラクタ[] = determineConstructorsFromBeanPostProcessors ctors(たbeanClass、のbeanName)<?>; 

3.5
空でない場合// ctors、それはコンストラクタであり@Autowired注釈、初期化するコンストラクタを意味します。
IF(ctors!= nullをmbd.getResolvedAutowireMode ||()|| == AUTOWIRE_CONSTRUCTORの
mbd.hasConstructorArgumentValues()||!ObjectUtils.isEmpty(引数)){
ctorsが空でない場合は、//、コンストラクタについて説明する@Autowired注釈は
、autowireConstructor(のbeanName、MBD、ctors、引数)を返す
}

ウェル注入ので、3.6は、好ましい構成は、好ましい構成が使用されるインスタンス化を空でない場合
?デフォルトのための好ましいコンストラクタの//建設
ctors = mbd.getPreferredConstructors();
IF(ctors = nullを!){
戻りautowireConstructor(のbeanName、MBD、ctors、NULL);
}

3.7それ以外の場合は、引数なしのコンストラクタは、Beanがインスタンスを呼び出します。
非参照例//コンストラクタのほとんどの例は、使用引数のコンストラクタのインスタンス化に方法はありません、と返されたBeanWrapperオブジェクトにパッケージ化。
instantiateBeanリターン(のbeanName、MBD); 

4.通話のapplyMergedBeanDefinitionPostProcessors。メインは方法MergedBeanDefinitionPostProcessor postProcessMergedBeanDefinitionインタフェースを実装するための呼び出しです。
主要な実装クラスがあります:

4.1 AutowiredAnnotationBeanPostProcessor。実装の注意情報収集Autowired、postProcessMergedBeanDefinition方法、カプセル化externallyManagedConfigMembersにおける値注釈。
    4.2 CommonAnnotationBeanPostProcessor。そしてpostProcessMergedBeanDefinitionでのリソースアノテーション情報収集プロセス、@、@PostConstrutor @ PreDestoryを達成カプセル化externallyManagedConfigMembers。
5.循環依存関係を許可するかどうかをチェックし、シングルトンか。条件を満たすが、それは二次キャッシュ、キャッシュから削除され、3に追加されます。
6.注入性、populateBeanメソッドを呼び出します。
6.1フィールドモードの注入、対応する属性、提出、および依存解析方法。その依存オブジェクトの値を取得します。
プロパティの注入性値を達成するためにpostProcessProperties方法InstantiationAwareBeanPostProcessorインタフェース実現6.2呼び出しは、価値、リソース注釈をautowiredました。
注入を達成、属性AutowiredAnnotationBeanPostProcessorの値をautowired。
CommonAnnotationBeanPostProcessorで実現するリソース注入性。
6.3 applyPropertyValuesメソッドを呼び出し、解析された属性値の<property />タグを実装しました。

7.ビーンコール
豆の完全な具体化にinitializeBean方法、その後の動作を制御します。

7.1はinvokeAwareMethodsメソッドを呼び出します。認識インタフェースの一連を実装するかに応じて、対応するメソッド呼び出し
7.2 postProcessBeforeInitialization方法BeanPostProcessorインターフェースを呼び出します。事前に初期化Beanメソッドの呼び出し。initMethod ,, afterpeoperties、postcontructorメソッド呼び出しのために。

  通話を識別1.InitDestroyAnnotationBeanPostProcessor実施方法@PostContrustorノート

                2.コールafterpropertiesSet方法InitializingBeanインターフェイスを実現しました。
                3.コール指定されたメソッドのinit-methodプロパティ。

     7.3通話 BeanPostProcessorの方法postProcessAfterInitializationためapplyBeanPostProcessorsAfterInitializationメソッドの実装の呼び出しを(TODOこの1つはAOPの実装を必要とする。フォローアップに最適です。)

  

8.コール  registerDisposableBeanIfNecessary方法。破壊されたばねコンテナを実装する場合、Beanは操作の対象が登録されて破壊します。










 
 

おすすめ

転載: www.cnblogs.com/cheng21553516/p/12199431.html