ディレクトリ
春(04)春の豆基盤
春のコアプログラミングのアイデアカタログ:https://www.cnblogs.com/binarylei/p/12290153.html
春の豆を定義します。1.
BeanDefinition春のフレームワークを備え、インターフェース豆のメタ構成に定義されています。
- Beanクラス名
- 等スコープ、自動バインディングモード、ライフサイクルコールバック、など豆行動の構成要素、
- その他の参考文献豆とも呼ばれることの協力者(協力者)または依存(依存関係)
- このようビーンのプロパティとして設定の設定、(プロパティ)
2. BeanDefinitionメタ情報
プロパティ(プロパティ) | 説明 |
---|---|
クラス | 豆完全なクラス名は、具象クラスではなく、抽象クラスやインターフェイスでなければなりません |
名前 | Beanの名前またはID |
範囲 | ビーンは、スコープ(例えば:などシングルトン、プロトタイプ、) |
コンストラクタ | 引数ビーンのコンストラクタのパラメータ(注入のための依存関係) |
プロパティ | (依存性注入のための)Beanのプロパティ |
オートワイヤリングモード | 豆自動バインディングモード(例:名前BYNAMEによります) |
レイジー初期化モード | ビーン怠惰な初期化モード(非遅延と遅延) |
初期化の方法 | 豆の初期化コールバックメソッド名 |
破壊方法 | 豆は、コールバックメソッド名を破壊します |
BeanDefinitionの構築
- BeanDefinitionBuilder
- AbstractBeanDefinitionと派生クラス
3. [名前]春の豆
3.1 Bean名
各Beanは豆が配置されているこれらの識別子が一意である必要があり、コンテナ、1つの以上の識別子(識別子)を持っています。典型的には、豆は、追加の場合は、展開しエイリアス(別名)を用いて検討し、唯一の識別子です。
XMLベースの構成メタ情報では、開発者は、ビーン識別子を指定するIDまたはname属性を使用することができます。豆は通常の文字で識別され、特殊文字は許可されています。ビーンは、それはname属性のカンマ(「」)またはセミコロン( 『;』)で使用することができるならば、エイリアスを導入するに間隔を置いて配置されています。
BeanのIDまたは名前属性左空白場合、コンテナは自動的にBeanの一意の名前を生成します、開発する必要はありません。公式提案ハンプ方法より一貫性のあるJavaの命名規則とそこには制限はありませんが、が、Beanが命名します。
3.2ビーン名ジェネレータ(BeanNameGenerator)
春のフレームワーク2.0.3で導入され、2つの実装は、フレームを構築しました:
- DefaultBeanNameGenerator:BeanNameGeneratorはユニバーサルデフォルトを達成します
- AnnotationBeanNameGenerator:BeanNameGeneratorが達成注釈ベースのスキャン、春のフレームワーク2.5への文書の公式始まりは、関連付けられました:
4.春の豆別名
バリュービーンエイリアス(別名)の
- リユース既存BeanDefinition
- 次のようなシーンのほかの命名、
<alias name="myApp-dataSource" alias="subsystemA-dataSource"/>
<alias name="myApp-dataSource" alias="subsystemB-dataSource"/>
5.登録春の豆
5.1 BeanDefinition登録
XML構成メタ情報
<bean name=”...” />
アノテーションの構成メタ情報
- @豆
- @成分
- @インポート
JavaのAPIの構成メタ情報
命名:
BeanDefinitionRegistry#registerBeanDefinition(String, BeanDefinition)
非命名:
BeanDefinitionReaderUtils#registerWithGeneratedName(AbstractBeanDefinition, BeanDefinitionRegistry)
クラスコンフィギュレーションモード:
AnnotatedBeanDefinitionReader#register(Class...)
5.2外部シングルトンオブジェクトの登録
JavaのAPIの構成メタ情報
SingletonBeanRegistry#registerSingleton
6.春豆のインスタンス化
ビーンのインスタンス(インスタンス)
- 従来の方法
- コンストラクタによって(設定メタ情報:XML、JavaアノテーションとJava API)
- staticファクトリメソッドにより、(構成メタ情報:XMLとJava API)
- ビーンファクトリメソッドにより、(構成メタ情報:XMLとJava API)
- FactoryBeanの(設定メタ情報:XML、JavaアノテーションとJava API)により、
- 特殊な方法
- ServiceLoaderFactoryBean(設定メタ情報:XML、JavaアノテーションとJava API)により、
- 通过AutowireCapableBeanFactory#たcreateBean(のjava.lang.Class、int型、ブール値)
- 通过BeanDefinitionRegistry#registerBeanDefinition(文字列、BeanDefinition)
春の豆初期化7.
ビーン初期化(初期化)
- @PostConstructタグ付け
- InitializingBeanインターフェイス用)(afterPropertiesSetを実装しました
- カスタム初期化メソッド
- XML配置:<豆のinitメソッド=」INIT」... />
- Javaアノテーション:@Bean(にinitMethod = "INIT")
- Java API:AbstractBeanDefinition#setInitMethodName(文字列)
思考:3上記の方法は、同じ豆で定義されていると仮定すると、これらのメソッドの実行順序はどのように?
8.遅延初期化春の豆
ビーン遅延初期化(遅延初期化)
- XML構成:<豆怠惰-INIT = "真" ... />
- Javaアノテーション:@Lazy(真)
質問:遅延初期化されると、その後、オブジェクトはBeanの定義された非遅延の春のコンテナオブジェクトによって返された方法に違いがありますか?
9.破壊春の豆
豆破壊する(破壊)
- @PreDestroyタグ付け
- DisposableBeanインタフェースが破壊()メソッドを実装し
- カスタム破壊方法
- XML配置:<豆破壊=」破壊」... />
- Javaの注解:@Bean(破壊=」破壊」)
- Java API:AbstractBeanDefinition#setDestroyMethodName(文字列)
思考:3上記の方法は、同じ豆で定義されていると仮定すると、これらのメソッドの実行順序はどのように?
10.ガベージコレクション春豆
豆ガベージコレクション(GC)
- 閉じるSpringコンテナ(アプリケーションコンテキスト)
- GCの実行
- 春の豆がファイナライズカバー()メソッドが呼び出さバックです
11.面接の質問の選択
質問1:どのように春の豆を登録するには?
A:モノマーBeanDefinitionおよび外部オブジェクトを登録すること。
質問2:春BeanDefinitionは何ですか?
A:「定義春豆」のレビューと「BeanDefinitionメタ情報。」
質問3:Springコンテナが登録豆を管理する方法ですか?
:答えのようなトピックの後のセクションでより詳細に説明される:IoCの構成メタ情報の読み込みと解析、検索および注入とビーンのライフサイクルに依存しています。
少しを記録する意図は毎日ビット。おそらく、内容は重要ではありませんが、習慣は非常に重要です!