詳しくはSpringIOC BeanDeiftionを説明します。
3182 ワード
BenDefitonは何ですか?
BenDefitionはSpringのPOJOに対する抽象的なもので、BenDefitionを通じてビーンをよりよく作成、管理します。
定義
意味
beanClass Name
beanの類名この属性は常にbeanが本当に使うクラスの名前に対応しているわけではない。beanはある種類の静的な工場方法で生成します。このbeanClass Nameはこのクラスです。Beanは工場Beanを通して生成します。ここはnullです。
scope
スコープまたはプロトタイプ
lazy Init
怠惰にBenFacotry中のBeanをロードするかどうかは、デフォルトで怠惰にロードし、Application Contectは初期化段階で実行されます。
depends On
依存するbeanの名前は抽象的なAbstractBenFacotryの中でdependun配列であり、これらが依存されるbeanが優先的に実用化されることを保証する。
factoryBenName
factoryBeanを使ってbeanを作成すれば、ここで該当する工場beanのクラス名を指定します。
facotryMethodName
工場の方法名は、クラスの静的工場法に基づく場合、BEAN Class Nameと結合して使用し、工場beanに基づく場合、facotryBenNameと結合して使用し、bean定義下のconstruct Argment Valuesに内容があれば、工場方法は呼び出された時にその属性を使用します。
ロル
beanのキャラクター:APPLICATION、SUPPORT、INFRASTRUCTURRE。ヒントフレームは、beanのキャラクターと重要度です。
Abstract BeanDefition
AbstractBenDefitionは、BenDefitionに対する追加であり、いくつかの公共構成と公共能力を定義しており、これについては言及しない。
全機能のBenDefiton
RootBenDefinition
ChildBenDefinition
GenricBeanDefinition
ダイナミック設定parent beanは、parent beandをセットしなくてもいいです。
MergedBenDefinition
私は
BenDefitionはSpringのPOJOに対する抽象的なもので、BenDefitionを通じてビーンをよりよく作成、管理します。
定義
意味
beanClass Name
beanの類名この属性は常にbeanが本当に使うクラスの名前に対応しているわけではない。beanはある種類の静的な工場方法で生成します。このbeanClass Nameはこのクラスです。Beanは工場Beanを通して生成します。ここはnullです。
scope
スコープまたはプロトタイプ
lazy Init
怠惰にBenFacotry中のBeanをロードするかどうかは、デフォルトで怠惰にロードし、Application Contectは初期化段階で実行されます。
depends On
依存するbeanの名前は抽象的なAbstractBenFacotryの中でdependun配列であり、これらが依存されるbeanが優先的に実用化されることを保証する。
factoryBenName
factoryBeanを使ってbeanを作成すれば、ここで該当する工場beanのクラス名を指定します。
facotryMethodName
工場の方法名は、クラスの静的工場法に基づく場合、BEAN Class Nameと結合して使用し、工場beanに基づく場合、facotryBenNameと結合して使用し、bean定義下のconstruct Argment Valuesに内容があれば、工場方法は呼び出された時にその属性を使用します。
ロル
beanのキャラクター:APPLICATION、SUPPORT、INFRASTRUCTURRE。ヒントフレームは、beanのキャラクターと重要度です。
Abstract BeanDefition
AbstractBenDefitionは、BenDefitionに対する追加であり、いくつかの公共構成と公共能力を定義しており、これについては言及しない。
全機能のBenDefiton
RootBenDefinition
parentbean
の定義を設定できません。彼自身がルートです。ChildBenDefinition
parent bean
を設定して定義しなければならないし、コンストラクタによって指定しなければならない。GenricBeanDefinition
ダイナミック設定parent beanは、parent beandをセットしなくてもいいです。
MergedBenDefinition
私は
Spring
のソースコードを読んでいますが、MergedBeanDefinition
とgetMergedLocalBeanDefinition
の方法に気づいています。MergedBeanDefition
はSpringの中の抽象的なBeanDefition
概念です。その本質はRootBenDefinitionです。MergedBeanDefinition
は、中国語では、統合されたbean
と理解され、上記BeanDefition
においてparentbean
が規定されており、Spring
は、bean
に対応するBeanDefitione
を確認し、スマート合併bean
はparentbean
とともに行われる。getMergedLocalBeanDefinition
方法の要約によって、理解を深める。
synchronized (this.mergedBeanDefinitions) {
//mbd->mergedBeanDefinition
RootBeanDefinition mbd = null;
RootBeanDefinition previous = null;
if (mbd == null || mbd.stale) {
previous = mbd;
/** bd.getParentName() == null
beanDefition RootBeanDefition
beanDefition parentBean GenricBeanDefition
**/
if (bd.getParentName() == null) {
if (bd instanceof RootBeanDefinition) {
mbd = ((RootBeanDefinition) bd).cloneBeanDefinition();
}
else {
mbd = new RootBeanDefinition(bd);
}
}
/** beanDefition ChildBeanDefition**/
else {
BeanDefinition pbd;
String parentBeanName = transformedBeanName(bd.getParentName());
if (!beanName.equals(parentBeanName)) {
pbd = getMergedBeanDefinition(parentBeanName);
}
else {
BeanFactory parent = getParentBeanFactory();
if (parent instanceof ConfigurableBeanFactory) {
/ /
pbd = ((ConfigurableBeanFactory) parent).getMergedBeanDefinition(parentBeanName);
}
mbd = new RootBeanDefinition(pbd);
mbd.overrideFrom(bd);
}
}
return mbd;
}
以上がSpringIOC BeanDeiftionの詳細です。SpringIOC BeanDeiftionに関する資料は他の関連記事に注目してください。