今すぐ Spring6 の学習を始めましょう
第1章「春の黙示録」
1.OCP開閉原理
元の構造関係によれば、各オブジェクトを呼び出す必要があるとき、それ自体が新しいため、変更の要求は本体全体に影響を与えます。
OCP (Open Close Principle) は拡張に対してオープンであり、変更に対してクローズドであるため、ソフトウェアを変更する必要がある場合は、既存のコードを変更するのではなく、ソフトウェア エンティティの動作を拡張することによって変更を実装するようにしてください。
2. DIP 依存関係逆転の原理
目的: プログラムの結合を減らし、スケーラビリティを向上させる
3. 現在のプログラムの設計は明らかに OCP と DIP の両方に違反しています
この問題を解決するには、「制御の反転」というプログラミングの考え方を使うことができます。
反転すると次の 2 つのことが起こります。
- まず第一に、プログラム内で新しいオブジェクトを作成するためにハードコーディングされたメソッドは使用しません。(新しいオブジェクトについては気にしません。新しいオブジェクトに対する権利は引き継がれます。)
- 2 番目のこと: オブジェクト間の関係を維持するためにプログラム内でハードコーディングされたメソッドを使用しません。(オブジェクト間の関係を維持し、それを引き渡す権利は気にしません。)
制御の反転: これはプログラミングのアイデアです。または新しいデザインパターンとも呼ばれます。比較的新しい外観のため、GoF23 デザイン パターンの範囲には含まれていません。
こうして春がやって来ます。
- Springフレームワークは制御IoCの反転のアイデアを実装しています
- Spring フレームワークは、新しいオブジェクトの作成に役立ちます。
- Spring フレームワークは、「オブジェクトとオブジェクト間の関係」を維持するのに役立ちます。
SpringはIoCの考え方を実装したコンテナです。
制御の反転を実装するには多くの方法がありますが、その中でより重要なものは依存性注入 (Dependency Injection、略して DI) と呼ばれます。依存性注入は、このアイデアを具体的に実装したものです。
依存性注入 DI には、次の 2 つの一般的な方法があります。
- 1つ目のタイプ:セットインジェクション(setメソッドを実行して属性に値を代入)
- 2つ目のタイプ:構築メソッドインジェクション(構築メソッドを実行してプロパティに値を代入する)
依存関係注入における「依存関係」とは何を意味しますか? 「注入」とは何を意味しますか?
- 依存関係: A オブジェクトと B オブジェクトの間の関係。
- インジェクション: A オブジェクトと B オブジェクトが関係を持つことができる手段です。
- 依存関係の注入: オブジェクト A とオブジェクト B の間の関係は、注入によって維持されます。また、インジェクションには、セットインジェクションとコンストラクションインジェクションが含まれます。
第2章「春の総覧」
1. 春の紹介
Baidu Encyclopedia からの紹介:
Spring は、Rod Johnson によって作成されたオープンソース フレームワークです。これは、エンタープライズ アプリケーション開発の複雑さに対処するために作成されました。すべての Java アプリケーションは、シンプルさ、テスト容易性、疎結合の点で Spring の恩恵を受けることができます。Spring は、軽量の制御反転 (IoC) およびアスペクト指向 (AOP) コンテナー フレームワークです。Spring セクションが最初に登場したのは、EJB の手首の膨張とテストの難しさの設計を解決することでした。Spring は開発を簡素化するために生まれました。これにより、プログラマーはコア ビジネスの実装だけに集中すればよくなり、ビジネス以外のロジック コード (トランザクション制御、セキュリティ ログなど) にはできる限り注意を払わなくなります。
2. Spring の 8 つのモジュール
Spring5 以降に WebFlux モジュールを追加
3. スプリングの特徴
1. 軽量
- a. スプリングはサイズ、オーバーヘッドともに軽量です。完全な Spring フレームワークは、サイズが 1MB をわずかに超える JAR ファイルとして配布できます。また、Spring が必要とする処理のオーバーヘッドも無視できます。
- b. Spring は非侵入的です: Spring アプリケーションのオブジェクトは Spring 固有のクラスに依存しません。
2. 制御の反転
- a. Spring は、Inversion of Control (1oC) と呼ばれる技術を通じて疎結合を促進します。IoC が適用されると、オブジェクト自体が依存オブジェクトを作成または検索するのではなく、オブジェクトが依存する他のオブジェクトが受動的に渡されます。loC は NDI の逆と考えることができます。オブジェクトがコンテナーから依存関係を見つけるのではなく、オブジェクトの初期化時にオブジェクトの要求を待たずにコンテナーが依存関係を積極的に渡します。
3. アスペクト指向
- a. Spring はアスペクト指向プログラミングの豊富なサポートを提供し、アプリケーションのビジネス ロジックをシステム レベルのサービス (監査やトランザクション管理など) から分離することで一貫した開発を可能にします。アプリケーション オブジェクトは、本来行われるべきこと、つまり完全なビジネス ロジックのみを実行します。それ以上のことは行いません。彼らは、ロギングやトランザクションのサポートなど、他のシステムレベルの問題については責任を負いません (または認識することさえありません)。
4. 容器
- a. Spring にはアプリケーション オブジェクトの構成とライフサイクルが含まれ、管理されます。これはコンテナーであるという意味で、各 Bean の作成方法を構成できます。構成可能なプロトタイプ (プロトタイプ) に基づいて、Bean は別のインスタンスを作成できます。または、必要になるたびに新しいものを生成します。また、それらが互いにどのように関係しているかについても説明します。ただし、Spring を従来の重量のある EJB コンテナと混同しないでください。EJB コンテナは、多くの場合、かさばり、扱いにくく、使用が困難です。
5. フレーム
- a. Spring では、単純なコンポーネントを構成し、組み合わせて複雑なアプリケーションを作成できます。Spring では、アプリケーション オブジェクトは、通常は XML ファイルで宣言的に作成されます。Spring は多くの基本機能 (トランザクション管理、永続化フレームワークの統合など) も提供しており、アプリケーション ロジックの開発はユーザーに任せられます。
これらの Spring 機能をすべて使用すると、よりクリーンで管理しやすく、テストしやすいコードを作成できます。また、Spring のさまざまなモジュールの基本サポートも提供します。
最後に、Spring6 には最低でも jdk17 が必要なので、明日からプログラムを書き始めます。