【SpringBootの入門から習得まで】第1章 SpringとSpringBoot

1.Spring と SpringBoot

1.1 春の簡単な説明

さまざまなコンテキストで、Spring はさまざまな意味を表します。次にSpringを「広義」と「狭義」の視点から紹介します。

春の公式サイト:https://spring.io/

1.1.1 広義のSpring: Springテクノロジースタック

広義の Spring は、Spring Framework をコアとする Spring テクノロジー スタックを指します。

10 年以上の開発を経て、Spring はもはや純粋なアプリケーション フレームワークではなく、Spring Framework、Spring MVC、SpringBoot、Spring Cloud、Spring などの複数の異なるサブプロジェクト (モジュール) で構成される成熟したテクノロジに徐々に発展しました。データ、Spring Security など、Spring Framework は他のサブプロジェクトの基礎となっています。

これらのサブプロジェクトは、エンタープライズ レベルのアプリケーション開発からクラウド コンピューティングまですべてをカバーし、開発者がソフトウェア開発の過程で発生するさまざまな実際の問題を解決するのに役立ち、開発者により良い開発経験をもたらします。

プロジェクト名 説明
春のデータ Spring が提供するデータ アクセス モジュールは、JDBC と ORM を適切にサポートします。これにより、開発者は比較的統一された方法を使用して、さまざまな種類のデータベースにあるデータにアクセスできます。
春のバッチ 開発者が堅牢で効率的なバッチ処理アプリケーションを簡単に開発するのに役立つ、エンタープライズ レベルのシステムでの毎日のバッチ処理タスク用の軽量フレームワーク。
春のセキュリティ 以前は Acegi と呼ばれていましたが、Spring で最も成熟したサブモジュールの 1 つです。これは、カスタマイズ可能な認証およびアクセス制御フレームワークです。
春のモバイル これは、モバイル Web アプリケーションの開発を簡素化するための Spring MVC の拡張です。
スプリングブーツ これは、Spring チームが提供する新しいフレームワークであり、Spring アプリケーションの構築と開発プロセスを簡素化できる、Spring およびサードパーティ ライブラリのすぐに使用できる構成を提供します。
春の雲 Spring Boot に基づくマイクロサービス フレームワーク。これは特定のテクノロジーではなく、一連のマイクロサービス ソリューションまたはフレームワークの順序付けられたコレクションです。市場で成熟した実証済みのマイクロサービス フレームワークを統合し、Spring Boot のアイデアを通じてそれらを再パッケージ化して、複雑な構成と実装の原則を保護し、最終的に開発者にシンプルで理解しやすく、簡単に使用できる一連のサービスを提供します。 -deploy 保守が容易な分散システム開発キット。

1.1.2 狭義のSpring: Spring Framework

狭義のSpringは、特にSpring Frameworkを指し、これは通常Spring Frameworkと呼ばれます。

Spring フレームワークは、アスペクト指向の Java アプリケーション向けの階層化されたワンストップの軽量ソリューションであり、Spring テクノロジ スタックのコアおよび基盤であり、エンタープライズ レベルのアプリケーション開発の複雑さを解決するために作成されました。

Spring には、IOC と AOP という 2 つのコア部分があります。

説明
IOC Inversion of Control の略で「Inversion of Control」と訳され、オブジェクトを作成するプロセスを Spring に渡して管理することを指します。
AOP Aspect Oriented Programming の略で、「アスペクト指向プログラミング」と訳されています。AOP は、複数のクラスのパブリックな動作をカプセル化するために使用され、システム内のコードの重複を減らし、モジュール間の結合を減らすために、ビジネスとは関係なく、ビジネス モジュールによって一般的に呼び出されるロジックをカプセル化します。さらに、AOP は、ログ、トランザクション、アクセス許可など、いくつかのシステム レベルの問題も解決します。

1.2 Springでできること

1.2.1 Spring の機能

ここに画像の説明を挿入

  1. マイクロサービス マイクロサービス アーキテクチャ: 独立して開発可能なマイクロサービスを通じて、運用レベルの機能を迅速に提供します。Spring Boot の機能により、本番環境でマイクロサービスを大規模に構築して実行することが非常に簡単になります。これに基づいて、Spring Cloud は、マイクロサービス アプリケーションが管理をさらに削減し、フォールト トレランスを向上させるのに役立ちます。

  2. リアクティブ リアクティブ プログラミング: Spring の非同期のノンブロッキング アーキテクチャにより、コンピューティング リソースをさらに活用できます。これは、非同期、ノンブロッキングに基づいた新しい開発コンセプトとテクノロジーです。

  3. クラウド: あなたのコード、あらゆるクラウド - 私たちはあなたをカバーします。使用するプラットフォームに関係なく、サービスを接続して拡張します。分散型マイクロサービス システムの開発は困難な場合があります。複雑さはアプリケーション層からネットワーク層に移り、サービス間のより多くの相互作用が必要になります。Spring Cloud には、アプリケーションをクラウドで実行するために必要な多くのサービスが含まれており、クラウド ネイティブの構築に役立ちます。

  4. Web アプリ: あらゆるデータ ストアに接続された、高速で安全かつ応答性の高い Web アプリケーションのフレームワーク。これは私たちの最も一般的に使用されるモジュールです.Spring は Spring MVC を提供します.これにより、以前のサーブレットを使用する退屈な開発方法を取り除き、より簡潔でエレガントな API を使用して Web アプリケーションの開発を完了することができます.

  5. サーバーレス サーバーレス プログラミング: 究極の柔軟性、オンデマンドでのスケーリング、および需要がない場合のゼロへのスケーリング。サーバーレス アプリケーションは、最新のクラウド コンピューティング機能と抽象化を利用して、アプリケーションがインフラストラクチャよりもビジネス ロジックに集中できるようにします。Spring Cloud Function は、Spring 開発者がサーバーレスまたは FaaS プラットフォームを活用するための機能を提供します。

  6. イベント ドリブン イベント ドリブン: 企業と統合します。ビジネス イベントに対応します。ストリーミング データをリアルタイムで処理します。イベント駆動型システムは、現代の企業が実際にどのように機能するかを反映しており、マイクロサービス アプリケーション アーキテクチャで広く使用されています。Spring は、開発者がイベントを中心にアプリケーションを構築するのに役立ちます.Spring には、ストリーミング、統合、データ フローなど、多くのイベント駆動型プロジェクトがあります。

  7. バッチ: タスクを自動化します。オフラインのデータ処理に適しています。バッチ処理には大量のデータを効率的に処理する機能があり、Spring Batch の標準処理モードは、開発者が JVM 上で堅牢なバッチ ジョブとミッション クリティカルなアプリケーションを構築するのに役立ちます。

1.2.2 春の生態

対象:

  • ウェブ開発
  • データアクセス
  • 安全にコントロール
  • 分散
  • メッセージサービス
  • モバイル開発
  • バッチ処理

1.3 Spring5のメジャーバージョンアップ

1.3.1 リアクティブプログラミング

ここに画像の説明を挿入

上図はSpringが公式に提供しているSpring MVCとSpring WebFluxを比較したもので、まず一番上の説明情報を見て、右側がSpring MVCの説明です。

Spring MVC は、サーブレット API に基づいて構築されており、スレッドごとに 1 つのリクエストのモデルを備えた同期ブロッキング I/O アーキテクチャを使用しています (翻訳: Spring MVC は、サーブレット API に基づいて構築されており、同期ブロッキング I/O アーキテクチャを使用して、各スレッド-ワンリクエストモデル。)

左側は Spring WebFlux の説明です。

Spring WebFlux は、マルチコアの次世代プロセッサを活用し、膨大な数の同時接続を処理するためにゼロから構築されたノンブロッキング Web フレームワークです (翻訳: Spring WebFlux はゼロから構築されたノンブロッキング Web フレームワークです。マルチコアの次世代プロセッサを利用し、多数の同時接続を処理します。)

リアクティブ スタック Web フレームワークの補足として、バージョン 5.0 以降、Spring ファミリー バケットに Spring WebFlux が追加されました。

Netty、Undertow、Servlet 3.1+ などのコンテナーで実行される、完全にノンブロッキングの Reactive Streams 対応コンテナーです。Spring WebFlux を使用すると、同時リクエストを処理するために使用するスレッドを減らすと同時に、アプリケーションを拡張するために使用するハードウェア リソースを減らすことができます。

春のMVC

  • サーブレット API の上に構築されています。
  • 同期ブロッキング I/O モデルは、アプリケーションが現在のスレッドをブロックすると考えているため、Request は Thread に対応し、多数のスレッドを含むスレッド プールが必要です。

春の WebFlux

  • Reactive Streams アダプター上に構築されています。
  • 非同期ノンブロッキング I/O モデルは、アプリケーションが現在のスレッドをブロックしないと考えているため、リクエストを処理するために少数の固定スレッドを含むスレッド プール (イベント ループ ワーカー) のみが必要です。

Spring MVC または WebFlux?

WebFlux は Spring MVC に代わるものではなく、主に非同期ノンブロッキング プログラミング モデルに適用されます。プロジェクトがこのモデルではない場合、またはアプリケーションが現在の状況に対処するのに十分である場合は、WebFlux に切り替える必要はありません。この役人はまた、この選択についていくつかの注意点を挙げました。

ここに画像の説明を挿入

同じ点:

1. @Controller などの Spring MVC アノテーションを使用して、2 つの Web フレームワーク間の自由な変換を容易にすることができます。

2. Tomcat、Jetty、Undertow Servlet コンテナー (Servlet 3.1+) を使用できます。

3、…

違い:

1.Spring MVC は同期ブロッキングを使用するため、開発者が機能コードを記述したり、テストをデバッグしたりするのに便利です。一般的に言えば、Spring MVC がシーンに対応できる場合は、WebFlux コーディングはより複雑になるため、WebFlux を使用しないようにしてください。

2. WebFlux はデフォルトで Netty によって開始され、デフォルトのポートは自動的に 8080 に設定されます。また、Jetty や Undertow などのコンテナーのサポートも提供します。開発者は、対応するコンテナー Starter コンポーネントの依存関係を追加することで、対応する組み込みコンテナー インスタンスを構成して使用できます。

ただし、Tomcat、Jetty などの Servlet 3.1+ コンテナー、または Netty や Undertow などの非サーブレット コンテナーである必要があることに注意してください。

3. スターター コンポーネント

Webflux は、多くの「すぐに使える」スターター コンポーネントを提供します。スターター コンポーネントは、アプリケーションにロードできる Maven の依存関係です。対応する Starter コンポーネントを使用するには、対応する依存関係の構成を Maven 構成に追加するだけで済みます。たとえば、spring-boot-starter-webflux依存関係、Web Flux や Tomcat 組み込みコンテナーなどのレスポンシブ API サービスを構築できます。

4. WebFlux は公式に多くの Starter コンポーネントを提供しており、各モジュールには、さまざまな複雑なビジネス要件を達成するための選択サポートを実現するためのさまざまなテクノロジが含まれています。

  • ウェブ:Spring WebFlux
  • テンプレートエンジン: Thymeleaf
  • ストレージ: Redis、MongoDB、Cassandra。MySQL をサポートしていません
  • 組み込みコンテナー: Tomcat、Jetty、Undertow

1.3.2 内部ソースコード設計

インターフェースのデフォルト実装など、Java8 のいくつかの新機能に基づいています。ソース コード アーキテクチャを再設計します。

Spring Framework 4.x のベースライン バージョンは Java SE 6 です。つまり、Java 6、7、および 8 をサポートしています。Spring Framework コードに対する Java SE 6 および 7 の制約をサポートする必要があります。フレームワーク コードは、Java 8 の新機能を使用できません。そのため、他の国が Java 8 にアップグレードすると、Spring Framework のコード (少なくとも主要部分) は以前のバージョンの Java を使用するように制限されます。

Spring Framework 5.0 では、ベースライン バージョンは Java 8 です。Spring Framework コードは、Java 8 の新機能を使用するようにアップグレードされました。より読みやすく効率的なフレームワーク コードが改善されます。使用される Java 8 機能の一部は次のとおりです。

  • コア Spring インターフェースの Java 8 静的メソッド。
  • Java 8 リフレクションの機能強化に基づく内部コードの改善。
  • フレームワーク コードで関数型プログラミング (ラムダ式とストリーム) を使用します。

1.4 SpringBoot を使用する理由

Spring Boot は、Pivo​​tal チームが提供する Spring ベースの新しいオープン ソース フレームワークで、Spring アプリケーションの構築と開発プロセスを簡素化することを目的としています。Spring Boot は、多数の XML 構成ファイルを削除し、複雑な依存関係の管理を簡素化します。

Spring Boot は、Spring の優れた機能をすべて備えています.Spring Boot は、Spring ができるすべてのことを行うことができ、使いやすく、より機能的で、より安定して堅牢です. 近年のマイクロサービス技術の人気により、Spring Boot は最近注目されている技術になりました。

Spring Boot は、一般的に使用される多数のサードパーティ ライブラリ構成を統合します. Spring Boot アプリケーションのこれらのサードパーティ ライブラリは、構成なしでほとんどすぐに使用できます. ほとんどの Spring Boot アプリケーションは、非常に少量の構成コード (Java ベースの構成) の代わりに、開発者はビジネス ロジックにより集中できます。

Spring Boot を使用すると、「実行するだけ」のスタンドアロンの本番グレードの Spring ベースのアプリケーションを簡単に作成できます。
Spring プラットフォームとサードパーティのライブラリについて独自の見解を持っているため、最小限の手間で始めることができます。ほとんどの Spring Boot アプリケーションでは、Spring 構成はほとんど必要ありません。

Spring Boot は、すべての Spring ベースの開発プロジェクトの出発点です。

Spring Boot は、Spring アプリケーションをできるだけ早く、できるだけ少ない構成ファイルで起動して実行できるように設計されています。

Spring Boot は、Spring フレームワークを置き換えることを意図したものではありませんが、Spring フレームワークと他のサードパーティのライブラリおよびフレームワークとの統合プロセスを簡素化することを目的としています。

Spring Boot は、「カスタムは構成よりも優れている」という概念を使用します (プロジェクトには多くの構成があり、組み込みのカスタム構成もあるため、必要ありません)。プロジェクトを迅速に実行します。

Spring Boot は新しいフレームワークではありませんが、デフォルトで多くのフレームワークの使用を構成します. Maven がすべての jar パッケージを統合するように、Spring Boot はすべてのフレームワークを統合します.

1.4.1 SpringBoot の利点

以前の SSM プロジェクトを振り返ってみると、構築プロセスはまだ比較的面倒で、次のものが必要です。

  1. web.xml を構成し、Spring と Spring MVC をロードします。
  2. データベース接続の構成、ログ ファイルの構成
  3. 構成ファイルを読み取って注釈を開くようにホームを構成します
  4. マッパーファイルを構成する

Spring Boot を使用して、スタンドアロン (実行中の jar、組み込みのサーブレット コンテナー) の準実稼働レベルの Spring フレームワーク ベースのプロジェクトを簡単に作成できます.Spring Boot を使用すると、Spring 構成は必要ないか、ほとんど必要ありません.

  • スタンドアロンの Spring アプリケーションを作成する
    • スタンドアロンの Spring アプリケーションを作成する
  • Tomcat、Jetty、または Undertow を直接埋め込む (WAR ファイルをデプロイする必要はありません)
    • 組み込み Web サーバー
  • 独自の「スターター」依存関係を提供して、ビルド構成を簡素化します
    • 自動スターター依存関係、ビルド構成の簡素化
  • 可能な限り、Spring およびサードパーティ ライブラリを自動的に構成する
    • Spring とサードパーティの機能を自動的に構成する
  • メトリクス、ヘルスチェック、外部化された構成など、本番環境に対応した機能を提供する
    • 本番レベルの監視、ヘルス チェック、および外部化された構成を提供します
  • コード生成は一切不要で、XML 構成も必要ありません。
    • コード生成不要、XML 記述不要

1.4.2 SpringBoot の欠点

  • 迅速なイテレーションでは、変更に常に注意を払う必要があります。
  • パッケージが深すぎて、内部原理が複雑で、マスターするのは簡単ではありません。

1.5 マイクロサービスの概念

James Lewis (James Lewis) と Martin Fowler (Martin Fowler) は、マイクロサービスの完全な概念を思いつきました。

  • マイクロサービスはアーキテクチャ スタイルです。
  • アプリケーションは一連の小さなサービスに分割されます。
  • 各サービスは独自のプロセスで実行されます。つまり、個別にデプロイおよびアップグレードできます。
  • サービス間で軽量の HTTP 対話を使用します。
  • サービスはビジネス機能ごとに分割されています。
  • 完全に自動化された展開メカニズムによって個別に展開できます。
  • 分散化、サービスの自律性。サービスは、さまざまな言語やさまざまなストレージ テクノロジを使用できます。

詳細については、マイクロサービスのドキュメントを参照してください

おすすめ

転載: blog.csdn.net/ligonglanyuan/article/details/125910928