Springソースコード分析-Spring Post Processor組み込みポイントデザイン

序文

スプリングコンテナーの読み込みフェーズでは、埋め込みポイントに似た非常に重要なデザインがいくつかあります(この概念は一律に呼ばれるのではなく、「ポストプロセッサー」と呼ばれるものもあります)。当面は、この記事ではPostProcessorとしてインターフェースの文字通りの意味を使用します。これらのポストプロセッサーの設計は、スプリングコンテナーの機能を拡張します。プロジェクトの個々のニーズを満たすために、さまざまなタイプのポストプロセッサをカスタマイズし、処理ノードへの外部介入を実現し、BeanとBean定義の読み込みタイミングを実現できます。

Springのポストプロセッサー

Springソースコード分析-Spring Post Processor組み込みポイントデザイン
最も重要な3つのコンポーネントは、ConfigurationClassPostProcessor、AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessorなどです。
まず、
Springソースコード(処理ノードの設計)での上記のコンポーネントの埋め込みポイントを見てみましょう。BeanDefinition登録ステージ
ClassPathXmlApplicationContextコンテナの実装、上記の3つのコンポーネントの登録ポイント
Springソースコード分析-Spring Post Processor組み込みポイントデザイン

Springソースコード分析-Spring Post Processor組み込みポイントデザイン
AnnotationConfigApplicationContextコンテナの実装、上記の3つのコンポーネントの登録ポイント
Springソースコード分析-Spring Post Processor組み込みポイントデザイン

Springソースコード分析-Spring Post Processor組み込みポイントデザイン
BeanDefinition介入フェーズをトリガーする
Springソースコード分析-Spring Post Processor組み込みポイントデザイン

Springソースコード分析-Spring Post Processor組み込みポイントデザイン

特定の処理フロー
Springソースコード分析-Spring Post Processor組み込みポイントデザイン

対応するソースコードの実装
Springソースコード分析-Spring Post Processor組み込みポイントデザイン

Beanのインスタンス化の前段階
Springソースコード分析-Spring Post Processor組み込みポイントデザイン

PostProcessorRegistrationDelegate.registerBeanPostProcessors()は、後で他のBeanをインスタンス化するときに使用できるように、BeanPostProcessorコンポーネントを事前にインスタンス化します。
Springソースコード分析-Spring Post Processor組み込みポイントデザイン

Beanインスタンス化のポストステージbr /> AbstractAutowireCapableBeanFactory.resolveBeforeInstantiation()は、@ Bean、factoryMethod、およびその他の外部インスタンス化の埋め込みポイントを処理します
Springソースコード分析-Spring Post Processor組み込みポイントデザイン

Springソースコード分析-Spring Post Processor組み込みポイントデザイン

Springソースコード分析-Spring Post Processor組み込みポイントデザイン
AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors()は、依存関係プロパティやBeanオブジェクトのメソッドインジェクションなどの情報を収集します
Springソースコード分析-Spring Post Processor組み込みポイントデザイン

Springソースコード分析-Spring Post Processor組み込みポイントデザイン
AbstractAutowireCapableBeanFactory.populateBean()Beanオブジェクトの依存性注入の割り当て
Springソースコード分析-Spring Post Processor組み込みポイントデザイン

Springソースコード分析-Spring Post Processor組み込みポイントデザイン
AbstractAutowireCapableBeanFactory.initializeBean()は、BeanオブジェクトのAop動的プロキシ関連処理を生成します
Springソースコード分析-Spring Post Processor組み込みポイントデザイン

Springソースコード分析-Spring Post Processor組み込みポイントデザイン

Springソースコード分析-Spring Post Processor組み込みポイントデザイン

Springソースコード分析-Spring Post Processor組み込みポイントデザイン

Springソースコード分析-Spring Post Processor組み込みポイントデザイン

ポストプロセッサーの応用

3つのポストプロセッサーは実際のプロジェクトではあまり使用されませんが、一部のプロジェクトは次のシナリオを使用します:1. beandefinitionが登録された後、コンテナー内のbeandefinitionを実行時に拡張または介入する必要があります。 Beanのインスタンス化のプロセスでは、特定のクラスがSpringでインスタンス化されることを望まない; 3.コンテナの起動後に、いくつかのグローバルビジネスロジックが実行されることを願う; 4. Springプラグインの開発は、Springと統合またはドッキングする必要がある。カスタムポストプロセッサのシナリオの例をいくつか示します
。BeanDefinitionRegistryPostProcessor拡張
Springソースコード分析-Spring Post Processor組み込みポイントデザイン
BeanFactoryPostProcesser拡張
Springソースコード分析-Spring Post Processor組み込みポイントデザイン
InitializingBean、Beanインスタンス化拡張
Springソースコード分析-Spring Post Processor組み込みポイントデザイン

おわりに

ここでは、Springポストプロセッサのソースコードが一時的に共有されています。ポストプロセッサの使用シナリオをさらに詳しく知りたい場合は、Springコンテナの読み込みプロセスのソースコードを検討してください。この種のことで、使用シナリオはアノテーションほど一般的ではありませんが、その用途もあります(特に設計またはアーキテクチャーの場合)。プロジェクトや職種に応じて選べます。今日はこれで終わりです。春のソースコードのより乾燥した商品については、引き続き注意を払ってください!

おすすめ

転載: blog.51cto.com/14815984/2532795