Spring を使用する目的は、エンタープライズ アプリケーション開発の複雑さを解決することです。 Spring は、軽量の制御反転およびアスペクト指向のコンテナー フレームワークです。 Spring では、単純なコンポーネントを構成し、組み合わせて複雑なアプリケーションを作成できます。
(関連する推奨事項: Java インタビューの質問)
1. Spring を使用する理由は何ですか?
1. はじめに
目的: エンタープライズ アプリケーション開発の複雑さを解決します
機能: EJB の代わりに基本的な JavaBean を使用し、より多くのエンタープライズ アプリケーションを提供します機能
対象範囲: 任意の Java アプリケーション
簡単に言うと、Spring は軽量の制御反転 (IoC) およびアスペクト指向 (AOP) のコンテナ フレームワークです。
2. 軽量
スプリングはサイズ、オーバーヘッドともに軽量です。完全な Spring フレームワークは、1MB をわずかに超えるサイズの JAR ファイルで配布できます。また、Spring が必要とする処理のオーバーヘッドは無視できます。さらに、Spring は非侵入的です。通常、Spring アプリケーション内のオブジェクトは特定の Spring クラスに依存しません。
3. 制御の反転
Spring は、制御の反転 (IoC) と呼ばれるテクノロジーを通じて疎結合を促進します。 IoC が適用されると、オブジェクト自体が依存オブジェクトを作成または検索するのではなく、オブジェクトが依存する他のオブジェクトが受動的に渡されます。 IoC は JNDI の反対と考えることができます。オブジェクトがコンテナーから依存関係を探すのではなく、コンテナーは、オブジェクトの要求を待たずに、初期化時にオブジェクトに依存関係を積極的に渡します。
4. アスペクト指向
Spring はアスペクト指向プログラミングの豊富なサポートを提供し、アプリケーションのビジネス ロジックとシステム レベルのサービス (監査やトランザクション管理など) の分離を可能にします。 。アプリケーション オブジェクトは、実行すべきこと、つまり完全なビジネス ロジックを実装するだけで、それ以上のものは何も実装しません。彼らは、ロギングやトランザクションのサポートなど、他のシステムレベルの問題については責任を負いません (または認識することさえありません)。
5. コンテナ
Spring には、アプリケーション オブジェクトの構成とライフ サイクルが含まれ、管理されます。この意味で、これはコンテナです。各 Bean の作成方法を構成できます。構成可能なプロトタイプでは、Bean は単一のインスタンスを作成することも、必要になるたびに新しいインスタンスを生成することも、それらが相互にどのように関連しているのかを確認できます。ただし、Spring を、大きくて扱いにくく、使いにくい従来の重量 EJB コンテナと混同しないでください。
6. フレームワーク
Spring は、単純なコンポーネントを構成し、組み合わせて複雑なアプリケーションを作成できます。 Spring では、アプリケーション オブジェクトは、通常は XML ファイルで宣言的に作成されます。 Spring は多くの基本機能 (トランザクション管理、永続化フレームワークの統合など) も提供しており、アプリケーション ロジックの開発はユーザーに任せられます。
これらの Spring 機能をすべて使用すると、よりクリーンで管理しやすく、テストしやすいコードを作成できます。また、Spring のさまざまなモジュールの基本サポートも提供します。
2. aop とは何ですか?
AOP (Aspect-Oriented Programming、アスペクト指向プログラミング) は、OOP (Object-Oriented Programming、オブジェクト指向プログラミング) を補完、改良したものと言えます。 OOP では、カプセル化、継承、ポリモーフィズムなどの概念を導入して、オブジェクト階層を確立し、一般的な動作のコレクションをシミュレートします。
分散したオブジェクトにパブリックな動作を導入する必要がある場合、OOP は無力です。つまり、OOP では上から下への関係を定義できますが、左から右への関係の定義には適していません。例えばロギング機能。ロギング コードは、すべてのオブジェクト階層にわたって水平に分散される傾向があり、分散先のオブジェクトのコア機能とは何の関係もありません。
セキュリティ、例外処理、透過的な永続性など、他の種類のコードにも同じことが当てはまります。このような無関係なコードが随所に散在することを横断コードと呼び、OOP 設計では大量のコードの重複につながり、さまざまなモジュールの再利用に役立ちません。
AOP テクノロジはその逆です。「クロスカッティング」と呼ばれるテクノロジを使用して、カプセル化されたオブジェクトの内部を分析し、複数のクラスに影響を与えるパブリック動作を再利用可能なモジュールにカプセル化して、「アスペクト」という名前を付けます。 」。
いわゆる「アスペクト」とは、簡単に言うと、ビジネスとは関係がないが、ビジネス モジュールによって一般的に呼び出されるロジックや責任をカプセル化して、コードの重複を減らすことです。システムを統合し、モジュール間の結合を軽減し、将来の操作性と保守性を容易にします。
AOP は水平的な関係を表します。「オブジェクト」がオブジェクトのプロパティと動作をカプセル化した中空の円筒である場合、アスペクト指向プログラミング手法は鋭いナイフのようなものです。この中空の円筒を切り開きます。内部のメッセージを取得します。カットされた断面はいわゆる「アスペクト」です。そして、これらの切断部分を驚異的な技術で跡形もなく復元しました。
「横断的」テクノロジを使用して、AOP はソフトウェア システムを 2 つの部分 (中核的な懸念事項と横断的な懸念事項) に分割します。業務処理のメインプロセスが中心的な関心事であり、それとあまり関係のない部分が横断的な関心事です。
横断的な懸念事項の特徴の 1 つは、それらが中核的な懸念事項の複数の場所で発生することが多く、基本的にどこでも同様であるということです。権限認証、ロギング、トランザクション処理など。 Aop の役割は、システム内のさまざまな懸念事項を分離し、中核的な懸念事項と横断的な懸念事項を分離することです。
アバナードのシニア ソリューション アーキテクトであるアダム マギー氏が述べたように、AOP の中心的な考え方は、「アプリケーション内のビジネス ロジックを、それをサポートする共通サービスから分離する」ことです。
3.ioc とは何ですか?IOCとはInversion of Controlの略で、ほとんどの書籍では「制御の反転」と訳されています。
1996 年、Michael Mattson は、オブジェクト指向フレームワークの探求に関する記事の中で IOC の概念を初めて提案しました。オブジェクト指向の設計とプログラミングの基本的な考え方についてはすでに多くのことを説明しましたので、再度詳細には触れません。簡単に言うと、複雑なシステムを連携するオブジェクトに分解することを意味します。これらのオブジェクト クラスがカプセル化された後、内部実装が行われます。は外部に対して透過的であるため、問題解決の複雑さが軽減され、柔軟に再利用および拡張できます。
IOC 理論が提唱する要点は、おおよそ次のとおりです。「サードパーティ」を使用して、依存関係のあるオブジェクト間の分離を実現するということです。以下に示すように:
ご覧のとおり、中間に「サードパーティ」、つまり IOC コンテナが導入されたことにより、4 つの A、B 、C、D オブジェクト間の結合関係はなくなり、歯車間の伝達はすべて「サードパーティ」に依存し、すべてのオブジェクトの制御権は「サードパーティ」の IOC コンテナに渡されます。
したがって、IOC コンテナはシステム全体の重要な核となっています。IOC コンテナは、システム内のすべてのオブジェクトを結合して機能させる「接着剤」のような役割を果たします。この「接着剤」の混合物がなければ、オブジェクトは相互に連絡が取れなくなるため、IOC コンテナを「接着剤」に例える人もいます。
別の実験をしてみましょう。上の図の中央にある IOC コンテナを削除して、このシステムを見てみましょう:
何が見えるかこの画面は、システム全体を実装するために完成させる必要があるすべてです。このとき、4つのオブジェクトA、B、C、Dにはカップリング関係がなく、相互に関連性がない。
この場合、A を実装するときに、B、C、D を考慮する必要はなくなります。オブジェクト間の依存関係は最小限に抑えられています。したがって、IOCコンテナが実現できれば、システム開発にとっては素晴らしいこととなり、開発に参加する各メンバーは自分のクラスを実装するだけでよく、他のメンバーとは何の関わりもありません。
4. Spring の主要なモジュールは何ですか?Spring フレームワークには、これまでに 20 を超えるモジュールが統合されています。これらのモジュールは、次の図に示すように、主にコア コンテナ、データ アクセス/統合、Web、AOP (アスペクト指向プログラミング)、ツール、メッセージング、およびテスト モジュールに分かれています。
5. 春によく使用される注入方法は何ですか?Spring は DI (Dependency Injection) を通じて IOC (Inversion of Control) を実装します。主な注入方法は 3 つあります:
##アノテーションベースのインジェクション
以上が2020 年の新しい Java 面接の質問 - 春の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。