Springポストプロセッサのソースコードを手作業で切り離し、Springコアを完全に理解する

前のレビュー

前の記事「スプリングのコアソースコードを手で引き裂き、スプリングプロセスを完全に理解する」を続けてください。コンテキスト間の論理的な関係により、前の記事を読んでいない友人は、最初に前の記事を読むことを強くお勧めします。

前の記事の簡単な要約:

最初に、HelloWorldバージョンのSpringを一緒に作成しました。Springのコアは制御の反転であるため、つまり、BeanオブジェクトはSpringに渡されて管理されます。開発者はそれを使用するときにのみそれを取得する必要があります。使用中の2つのステップがあります。最初のステップはアノテーション構成を介してSpringコンテキストコンテナーを作成することです。2番目のステップは使用に必要なBeanを取得することです。

理にかなっている場合は、最初にこれら2つのステップに必要なフレームワークを構築するため、次のシェルフがあります。

eb8f9d4eafb64473e11793fe358afdbc.png

次に、依存性注入のアノテーションを通じてSpringを使用するという目標を達成するために、この棚を肉と血で満たす必要があります。最初に行うことは、使用される注釈を定義することです。

fd14eba8d222599dfb493e3e06b5ec9d.png

これらのアノテーションと定義されたフレームワークに従って関数を実装することは、経験豊富な開発者ができることです。最終的なコードとSpringソースコードの統合を容易にするために、名前を少し調整しました。名前はSpringソースコードと同じで、機能も同じです。

0417ccb6715e17448dd28c6ef157d4a2.png

f981512b981d3f92c75a1aa229b52490.png

fe02f836737398cc2f75eb9034ac8085.png

春にBeanを作成するための重要な手順は、次のとおりです。

1.クラスに従ってBean定義を生成します

2.Beanに従ってインスタンス化する

3.インスタンスのBeanプロパティを入力します(自動配線されたプロパティがインスタンス化されます)

4.Beanオブジェクトの作成を完了します

実際、Springは、Beanをインスタンス化してBeanオブジェクトを生成する前に、Beanの初期化やBeanの拡張など、多くの処理も実行します。AOPとBeanのポストプロセッサは密接に関連しています。今日はこの部分に焦点を当てます。

この記事のすべてのコードテキストはhttps://github.com/xiexiaojing/yunaにあります。

Beanの初期化

SpringがBeanを初期化する方法は3つあり、原則は同じです。次のとおりです。

1.InitializingBeanインターフェースを実装します

2.@PostConstructアノテーションを使用します

3.またはinit-methodを指定します

<bean 
  id="testInitializingBean"
  class="com.TestInitializingBean"
  init-method="testInit">
 </bean>

それらが同時に存在する場合、シーケンスがあります。

実行順序:

コンストラクター>

@PostConstruct>

InitializingBean>

init-method

前のセクションでは多数のアノテーションメソッドが実装されているため、3つの初期化メソッドの原則は類似しています。この記事では、InitializingBeanメソッドのコードを手動で破棄します。

最初にInitializingBeanインターフェースを定義し、spring-beansのソースコードからインターフェース定義を直接コピーします。

f5e6333135d2dd8bd5b032960182f35b.png


次に、Beanがインスタンス化された後にリモートから値を取得するなどの使用シナリオを見つけます。

304363f958f27e341a518f4dc226bca8.png

実装も非常に簡単です。Beanを作成した後、判断と呼び出しを追加します。

73a0a97b652d0be2e07d7752becc4fae.png


効果を見てみましょう:

2147b17973bcb884e5ca6e045de7bbf8.png

上記は、Spring初期化プロセスの実装です。

Beanポストプロセッサ

Springには、BeanFactoryPostProcessorとBeanPostProcessorの2つのポストプロセッサがあります。前者はBeanファクトリポストプロセッサと呼ばれ、後者はBeanポストプロセッサと呼ばれます。今はみんなBeanについて話しているのですが、BeanFactoryについては話していませんので、ここではあまり紹介しません。

ポストプロセッサーの役割は木工のようです。一般的な木彫りの輪郭を最初に作成し、次のステップはそれを微調整して着色すること、つまり再処理することです。Spring-AOPはポストプロセッサーを介して実装されます。

Beanポストプロセッサの実行タイミングはどのくらいですか?インターフェイスの定義を読むと、理解できます。同様に、Springポストプロセッサのインターフェイスを直接コピーしてみましょう。

c43afbc5668121a3147649af99699bb4.png

ここには2つのメソッドがあり、1つのメソッドが呼び出されます。

初期化前、後処理

メソッドは次のように呼び出されます。

初期化後、後処理

メソッド定義に従って実装しましょう。

e33ec0c620ee5e79dac1b8fd9520dd23.png

Springには十分なスケーラビリティを提供するための複数のポストプロセッサがあるため、新しく定義したpostProcessorListがあることに注意してください。

9da8bf19809c811d2e5af9eb905d6e23.png


では、Springはいつポストプロセッサをこのリストに入れましたか?特定のポストプロセッサの例では、スキャン中に配置されます。

404fd584a9bc6a8f3d6a6cf8c1e93684.png


スキャンされるため、コンポーネントである必要があります。印刷された2つの歌詞をよく使うので、出典を説明しましょう。「MQ制作側の基本的なコミュニケーションプロセスを理解する-チャンネルを理解する」では、その曲のオリジナル曲を載せました。大学時代は聴いていたのですが、また聴いてみると気分が悪くなりました。おそらく、過去10年間の結婚で、彼女の夫は故意の愛を得ていることがわかりましたが、彼はとても寛容で不幸な人です。ははは、冗談ですが、私たちのような普通の人々、最終的に一緒にいる人々は、相互に寛容で成功しています。

少しリラックスして、要点に戻り、ポストプロセッサをスキャンします。

fc8318f726de524bfb78afb042203d43.png

ポストプロセッサは厳密に定義されているため、Beanを内部でバインドすることはできず、初期化を実行する必要がないため、直接インスタンス化できます。

演算結果:

1e77f0500f821f6dd48982f8362a5540.png

ここでは、2つのBeanが作成されるため、ポストプロセッサの2つのメソッドがそれぞれ2回実行されます。

491524a32df0b970b83ccc0eaec06e36.png

もちろん、ポストプロセッサの有効条件を指定することはできますが、すべてのBeanを指定できるわけではありません。

ここにAOPの簡単な紹介があります、そして私はそれを売りません。AOPは、 

AnnotationAwareAspectJAutoProxyCreator

ポストプロセッサによって実装されます。その中の多くの実装は、プロキシできるBeanを判断するようになります。

要約する

春に豆を作成するための重要な手順を要約しましょう。

1.クラスに従ってBean定義を生成します

2.Beanに従ってインスタンス化する

3.インスタンスのBeanプロパティを入力します

4.Beanを初期化します

5.Beanの後処理

6.Beanオブジェクトの作成を完了します

コードを再編成して、Springコードと同じ方法で名前を付けると、多くの場所でSpringソースコードに非常に近いことがわかります。Springのソースコードを理解することは役立つと思います。

さて、この記事を読んだ後、私の前の記事「 Spring Managementにオブジェクトを渡す3つの方法と古典的なアプリケーション」をもう一度読んで、Springをより深く理解しているかどうかを確認することをお勧めします。

一生のプログラミング

公式アカウントプラットフォームがプッシュルールを変更したため、コンテンツを見逃したくない場合は、コンテンツを読んだ後に「視聴」をクリックし、「スター」を追加して、新しい記事がプッシュされるたびにそれを追加することを忘れないでください。サブスクリプションリストに初めて表示されます。

PDCAの方法論、更新を見逃していないか確認してください:毎週水曜日の午後8時頃に記事を更新します。受け取っていない場合は、必ず[Programming Lifetime]公式アカウントを開いて見つけてください(*^▽^* )。

おすすめ

転載: blog.csdn.net/xiexiaojing/article/details/123785058
おすすめ