SpringbootはプログラムのアプリケーションタイプWebApplicationTypeをどのように決定しますか?

Springbootが起動すると、最初にSpringApplicationオブジェクトが初期化されます。具体的な呼び出しプロセスは次のとおりです。

上記の呼び出しメソッドから、プログラムが実行されると、SpringApplicationのコンストラクターが最初に呼び出されてSpringApplicationオブジェクトが作成され(図3)、具体的な実装が図5に示されていることがわかります。

【WebApplicationType】

SpringApplicationコンストラクターを選び出します(図5)。このコードの黄色いボックスは、プログラムのアプリケーションタイプ(webApplicationType)を示しています。

SpringApplicationプロパティのオブジェクトタイプWebApplicationTypeを見つけます。

次に、そのソースコードを開いて、オブジェクトが列挙型であり、3つの列挙値、つまりNONE、SERVLET、およびREACTIVEが定義されていることを確認します。

次の3つの列挙値が導入されています:

無し

アプリケーションをWebアプリケーションとして実行したり、組み込みWebサーバーを起動したりしないでください。

サーブレット アプリケーションはサーブレットベースのWebアプリケーションとして実行し、組み込みサーブレットWebサーバーを起動する必要があります。
反応性 アプリケーションはリアクティブWebアプリケーションとして実行する必要があり、組み込みのリアクティブWebサーバーを起動する必要があります。

その意味するところは、Springbootプロジェクトには3つのタイプのプログラムがあるということです。

(1)非Webアプリケーション(組み込みサーバーなし)。

(2)組み込みサーブレットベースのWebサーバー(Tomcat、Jetty、Undertowなど。実際、ほとんどのJava Webサイトアプリケーションは現在、Tomcatベースのサーブレットタイプのサーバーを使用しています)。

(3)組み込みのリアクティブWebサーバー(例:Netty)。

サーブレットコンテナでは、命令型プログラミング方式が使用され、コードは文ごとに実行されます。これは、理解とデバッグに役立ちますが、リアクティブWebプログラミングでは、非同期応答に基づいており、WebFluxフレームワークは次のようになります。より人気のあるリアクティブプログラミング。

3種類のSpringbootアプリケーションがわかったので、彼は現在のプログラムの種類をどのように判断しますか?

【WebApplicationType.deduceFromClasspath()方法】

アプリケーションタイプを割り当てたばかりのコードに戻ると、WebApplicationType.deduceFromClasspath()メソッドが表示されます。

このメソッドの実装ソースコードを開きます。ここでは、取得した3つのアプリケーションタイプのコードを確認できます。

【ClassUtils.isPresent()

このメソッドでは、繰り返しメソッドはClassUtils.isPresent()です。ここで、パラメーターはパッケージパスのクラス名です。では、この方法は何をするのでしょうか?引き続き確認してみましょう。

最初にStudentクラスを作成し、次にClassUtils.isPresent()メソッドを呼び出し、最後にメソッドがtrueを返すことを確認します。

 ここで、パラメーターを存在しないクラス名Student2に変更し、それがfalseであることがわかります。

したがって、次の結論を導き出すことができます。

ClassUtils.isPresent()メソッドは、クラスの存在を判断するために使用されます。クラスが存在する場合、返される結果はtrueです。クラスが存在しない場合、返される結果はfasleです。

【まとめ】

したがって、ソースコードに戻り、定数の定義と組み合わせてSpringbootアプリケーションのタイプを判断することは難しくありません。

次のように要約します。

(1)DispatcherHandlerクラスがプロジェクトに存在し、DispatcherServletクラスとServletContainerが存在しない場合、プログラムのアプリケーションタイプはREACTIVEです。つまり、リアクティブWebサーバーをロードして埋め込みます。

(2)サーブレットとConfigurableWebApplicationContextのいずれかがプロジェクトに存在しない場合、プログラムのアプリケーションタイプはNONEであり、組み込みWebサーバーをロードしません。

(3)上記の2つの場合を除いて、残りはSERVLETタイプに従って処理され、サーブレットタイプのWebサーバーが組み込まれます。

上記のクラスの決定はSpringの関連する依存関係パッケージに基づいており、依存関係パッケージをインポートする必要があるかどうかも開発者が決定するため、開発者はSrpingboot自体ではなくプログラムのアプリケーションタイプを決定できます。

最後に、写真が添付されています。

 

 

おすすめ

転載: blog.csdn.net/sunnyzyq/article/details/120022905
おすすめ