JavaRush /Java Blog /Random-JA /Spring について知っておくべきこと: 歴史、主要なモジュール、Java EE との比較
Константин
レベル 36

Spring について知っておくべきこと: 歴史、主要なモジュール、Java EE との比較

Random-JA グループに公開済み
こんにちは!現時点では、Java の知識を持つ開発者にとって最も人気のある開発方向は Web 開発です。もちろん、この専門分野については、学習するために必要なテクノロジーのリストがあります。主なものの 1 つはSpringです。 Spring について知っておくべきこと: 歴史、主要なモジュール、Java EE との比較 - 1代わりにJava EE を学ぶことができると主張する人もいるかもしれません。もちろんこれは真実ですが、現在、新しいプロジェクトの大部分はSpringを使用しており、Java Web 開発者にとって Spring は事実上デフォルトの必須テクノロジとなっています。市場のニーズに追いつきたいなら、それを勉強する必要があります。今日はSpringについて話したいと思います。つまり、Spring のビジョンを少し拡張するために、その作成の歴史、Java EEスタックとの主な違いについて話し、 Springスタックの主要なコンポーネントの簡単な概要を説明します。始めましょう! Spring について知っておくべきこと: 歴史、主要なモジュール、Java EE との比較 - 2

1. 春がいつどのように現れ、時間の経過とともにどのように変化したか

すべては2002 年 10 月にロッド ジョンソン氏が「Expert One-onOne J2EE Design and Development」という本を書いたときに 始まりました。WroxSpring について知っておくべきこと: 歴史、主要なモジュール、Java EE - 3 との比較から出版されたこの本の中で、著者は当時のエンタープライズ Java 開発の状況について説明し、いくつかの点を指摘しています。Java EEおよびコンポーネントベースの(Enterprise Java Bean)EJBの欠点。同時に、Rod Johnson は、通常の Java クラス (POJO - 単純な古い Java オブジェクト) と依存関係の注入に基づく、より単純なソリューションを提案しています。この本の中で、EJB を使用せずに高品質でスケーラブルなオンライン予約アプリケーションを作成する方法について説明しています。それらの。彼は、アプリケーション開発の複雑さを取り除き、以前は EJB を使用することでのみ可能であったことをすべてシンプルな JavaBeans を使用して実現できるようにする方法を明確に示しました。ただし、 Springの範囲はサーバー側で実行されるソフトウェア コンポーネントの開発に限定されません。どの Java アプリケーションでも、シンプルさ、テスト容易性、疎結合の点でフレームワークの利点を活用できます。彼のJ2EE開発設計はすぐに人気になりました。この本の一部として無料で提供されたアプリケーション コードの多くは再利用可能であり、すぐに多くの開発者がプロ​​ジェクトでそれを使用し始めました。Wrox には、ソース コードとパッチを掲載したこの本の Web ページがありました。彼らはこの本に関するオンライン フォーラムも提供しました。2003 年 2 月、開発者のユルゲン ヘラーとヤン カロフはロッド ジョンソンを説得して、フレームワークのコードに基づいてオープン ソース プロジェクトを作成するよう説得しました。その瞬間から、ロッド、ユルゲン、ヤンは、まったく新しいものを生み出すためにコラボレーションを開始しました。実際、新しいフレームワークの「Spring」という名前を思いついたのは、Yann Karoff でした。ここで意味するのは、春は春のようであり、従来の J2EE の「冬」の後の新たなスタートであるということです。
  • 2003 年 6 月に、Spring 0.9 が Apache 2.0 ライセンスに基づいてリリースされました。
  • Spring 1.0 は 2004 年 3 月にリリースされました。興味深いことに、Spring 1.0 のリリース前であっても、前のバージョン 0.9 は非常に好評で、広く採用されました。
  • 2004 年 8 月、ロッド ジョンソン、ユルゲン ヘラー、キース ドナルド、コリン サンパレヌは、Spring のコンサルティング、トレーニング、サポート会社であるInterface21 を共同設立しました。
  • 2006 年 10 月: XML 設定ファイルを簡素化する Spring 2.0 がリリースされました。
  • 2007 年 11 月にリリースされた Spring 2.5 では、アノテーション構成が導入されました。
  • 2012 年 12 月にリリースされた Spring 3.2 では、Java 構成が導入され、Java 7、Hibernate 4、Servlet 3.0 がサポートされ、少なくとも Java 1.5 が必要でした。
  • ヤン・カロフは早々にチームを去った。ロッド・ジョンソンは2012年に春チームを去った。Jürgen Heller は、現在も Spring 開発チームの現役メンバーです。
  • 2014 年にリリースされた Spring 4.0 では、Java 8 のサポートが追加されました。
  • 同じく 2014 年に Spring Boot が世界に発表されました。
  • Spring 5.0は2017年にリリースされました。Spring 5 をサポートする Spring Boot 2.x と同様です。
  • 実際、これが私たちのお気に入りのフレームワークが今私たちが知るフレームワークになった経緯です。

2. Spring と Java EE の比較

Web 開発者向けの2 つの主要なJavaスタック、 SpringJava EE を簡単に比較してみましょう。 Spring について知っておくべきこと: 歴史、主要なモジュール、Java EE - 4 との比較
Java EE
利点 欠陥
  • Java EE で書かれたアプリケーションは、より信頼性が高く、安全で、スケーラブルであると考えられています
  • Java EE は業界で承認された API 標準です
  • Springと同様に、主にアノテーションと CDI (コンテキストと依存関係の注入) に基づいています。
  • EJBコンテナとPOJOに基づく実装
  • 多数のトランザクションを伴う複雑なアプリケーションは、JEE によって非常にうまく処理されます。
  • スケーラブルなモノリシック アプリケーションでの使用に成功
  • Java EE には、特定のスタイルと構文を含む独自の OOP 言語があります。
  • 非常に複雑なアプリケーション開発環境であり、初心者にとっては理解するのが困難です(場合によっては高齢者にとっても)
  • 設計、展開、アプリケーション開発を含むプロジェクトの最終コストは法外に高額になる可能性があります
Oracle によってライセンス供与されている Java EE は、大衆向けアプリケーションを構築するために、幅広く適応性のある分散可能な環境を必要とする組織や企業向けに設計されています。Spring と同様に、Java EE には、データベース アクセス (JDBC、JPA)、リモート エンジニアリング呼び出し (RMI)、情報 (JMS)、Web 管理、XML 処理のための追加ライブラリが含まれており、エンタープライズ JavaBeans、ポートレット、サーブレット、Java Server Pages などの標準 API を特徴付けています。 Java EE の基本的な目標は Spring について知っておくべきこと: 歴史、主要なモジュール、Java EE - 5 との比較、さまざまな API を使用して現在のアプリケーションを構築する際に開発者が直面する主要な問題を解明することです。同時に、Java EE での開発は非常に複雑なので、初心者だけでなくハードルも非常に高くなります。また、経験豊富な専門家がすでに作成された機能を理解するのは難しい場合があるため、Java EE での開発には時間がかかり、それに応じてコストも高くなります。Java EE について一言で言えば、「 複雑だが柔軟」です。さて、ここで春 について少し話しましょう。 Spring について知っておくべきこと: 歴史、主要なモジュール、Java EE - 6 との比較
利点 欠陥
  • オブジェクトの相互作用を効果的に整理できます。
  • Java EEよりもシンプル
  • IOCおよびAOPに基づいて実装され、アプリケーションの疎結合が保証されます。
  • XML、Groovy、またはアノテーション構成に基づいて動作します
  • プレーンな古い Java オブジェクト (POJO) を使用できるため、開発者はアプリケーション サーバーのようなエンタープライズ コンテナを必要としません。
  • Java 開発者に高レベルのモジュール性を提供します
  • Java EE ライブラリの実装を提供しますが、独自の方法でその使用をより簡単にします。
  • オープンソースライセンス
  • Spring Boot により、アプリケーションの初期セットアップが大幅に簡素化されます
  • Spring アプリケーション コードは一般にテストが簡単です
  • 春は明確な焦点が欠けているため、開発が比較的困難です
  • 新しい Java 開発者にとって、Spring フレームワークを学ぶのは難しい場合があります (それでも Java EE よりは簡単です)。
  • Spring は Java EE より遅い
Spring は、大企業向けのオープンソース Java フレームワークです。Spring フレームワークは、POJO ベースのプログラミング モデルの機能を拡張することで、J2EE のアイデアを可能な限りシンプルに実装し、優れたプログラミング プラクティスを活用することを目的としています。それらの。Java EE は公式の標準に近いものですが、Spring はこの標準を独自の方法で実装するフレームワークに近いものです。

比較結果

私の理解では、Java EE と Spring は JDBC と Hibernate に似ており、JDBC はより高速なテクノロジですが、同時に多くの不要なコードを伴います。また、Hibernate はすでに JDBC を使用していますが、同時に開発を大幅に簡素化し、削減します (ただし、いくつかの制限は課せられます)。どちらが優れているかを確実に言うことは不可能です。これは、ArrayList と LinkedList のどちらが優れているのかという質問をいくらか思い出させます。結局のところ、状況に応じて、答えは同じになります。それぞれに独自の長所と短所があるため、自分の状況を比較検討し、どれが現時点で最も利益をもたらすかを理解しながら、慎重に選択する必要があります。 Spring について知っておくべきこと: 歴史、主要なモジュール、Java EE - 7 との比較

3. スプリングコンポーネント

さて、ここで Spring を構成するフレームワークについて少し話しましょう。

スプリングフレームワーク

これは、あらゆる展開プラットフォーム上で最新の Java ベースのエンタープライズ アプリケーションに包括的なプログラミングおよび構成モデルを提供するコア モジュールです。これには、多くのコア (コア) Springテクノロジーが含まれています。
  • コア- IoC (制御の反転) および DI (依存性注入)の概念を実装する基本機能。
  • AOP -アスペクト指向プログラミング- エンドツーエンドロジックの実装を目的としたアスペクト指向プログラミング。
  • MVCおよびWebFlux - Web インタラクション用のフレームワーク。
  • JDBCORM - データベースと対話するためのテクノロジー。
  • テスト- Spring コンテナー データの透過的で単純なテストのための機能。
  • SpEL - Spring 式言語 - Spring 式言語。

スプリングブーツ

アプリケーションの初期セットアップと Spring アプリケーション要素の自動構成を最小限に抑え、Spring ベースのアプリケーションの作成を簡素化します。Spring Bootを5分で起動する例

春のデータ

データ アクセス テクノロジ、リレーショナル データベースおよび非リレーショナル データベースの使用が大幅に簡素化されます (反復的なコードが削除され、データとの対話が簡素化されます)。この記事には、 Spring Data の接続に関する優れたチュートリアルが含まれています。

春の雲

これはマイクロサービス アーキテクチャで使用され、マイクロサービス間の相互作用を簡素化し、 AWSAzureなどのクラウド プラットフォームでのアプリケーションのデプロイを自動化します。Spring Cloud の詳細なチュートリアルはこちらを参照してください。ただし、このトピックは簡単なものではなく、上級レベルに近い専門家を対象としていることに注意してください。

スプリングセキュリティ

アプリケーションに強力でカスタマイズ可能な認証 (認証) およびアクセス制御 (認可) ツールを提供します。Spring Security をアプリケーションに接続する簡単な例は、この投稿で見つけることができます。 Spring について知っておくべきこと: 歴史、主要なモジュール、Java EE - 8 との比較

Spring GraphQL

このモジュールは、GraphQL Java 上に構築された Spring アプリケーションのサポートを提供します。 GraphQLは、クライアントが必要な限られたデータ セットをクエリできるようにする API のクエリ言語で、これにより限られた数のクエリでデータを収集できるようになります。すでに JPA に精通している場合は、同様の (または同じ) 概念を持つ EntityGraph にすでに出会ったことがあるかもしれません。GraphQL について詳しくは、こちらをご覧ください。

春のセッション

Spring フレームワークのこの部分は、ユーザー セッション情報を管理するための API と実装を提供します (ユーザー セッション データは、RedisMongoDbHazelCastなどの永続ストレージに保存されます)。Spring Sessionの使用例は、ここにあります。

春の統合

このモジュールは、Spring ベースのアプリケーションでのメッセージングを簡素化し、宣言アダプターを介して外部システムとの統合をサポートするように設計されています。これらのアダプターは、Spring のリモート処理、メッセージング、およびスケジューリングのサポートよりも高いレベルの抽象化を提供します。 詳細記事

春の休息

REST API 開発を簡素化する豊富なツール セットを提供します。リクエストをルーティングするためのツール、JSON/XML を必要なタイプのオブジェクトに変換するためのツールなどです。Spring の RESTful サービスの例は、この資料にあります。

Spring Web フロー

Spring Web Flow は Spring MVC に基づいており、Web アプリケーションの「フロー」を実装できます。このようなフローは、ユーザーが何らかのビジネス タスクを完了するまでガイドする一連のステップをカプセル化します。これらは複数の HTTP リクエストにまたがり、ステートフルで、トランザクション データを処理し、再利用可能であり、本質的に動的で耐久性があります。Spring Web Flow の接続例は、このガイド (英語)で参照できます。

春のWebサービス

このモジュールは、XML ペイロードを操作する多くの方法の 1 つを使用して柔軟な Web サービスを作成できるようにすることで、コントラクト ベースの SOAP サービスの開発を容易にするように設計されています。SOAP - Simple Object Access Protocol - オブジェクトにアクセスするための単純なプロトコル。

春のHATEOAS

このモジュールは、Spring、特に Spring MVC を操作するときに HATEOAS 原則に従う REST コントローラーを簡単に作成できるようにするいくつかの API を提供します。 HATEOAS - アプリケーション状態のエンジンとしてのハイパーメディア - アプリケーション状態のエンジンとしてのハイパーメディア。このSpringライブラリの使用方法は、ここで確認できます。

春バッチ

このモジュールは、企業システムの日常運用に不可欠なバッチ データ処理 (データが大きな単位で処理される場合、つまりバッチ) の機能を提供します。Spring Batch は、ロギング/トレース、トランザクション管理、ジョブ処理統計、ジョブの再開、スキップ、リソース管理など、大量のレコードを処理するために必要な再利用可能な機能を提供します。このリンクでSpring Batch に関する興味深いレビューを見つけることができます。

春の AMQP

このモジュールは、Spring のコア概念を AMQP ベースのメッセージング ソリューションの開発に適用します。メッセージを送受信するための高レベルの抽象化としてテンプレートを提供します。また、リスナー コンテナを使用したメッセージ駆動型 POJO のサポートも提供します。 AMQP - 高度なメッセージ キュー プロトコル - 高度なメッセージ キュー プロトコル。このプロジェクトには 2 つの部分が含まれています。 spring-amqp は基本抽象化であり、 spring-rabbit はRabbitMQの実装です。 Springを使用したRabbitMQ接続の例 Spring について知っておくべきこと: 歴史、主要なモジュール、Java EE - 9 との比較

Apache Kafka の春

このプロジェクトは、Spring のコア概念をKafkaベースのメッセージング ソリューションの開発に適用します。テンプレートは、メッセージを送信するための高レベルの抽象化として提供されます。また、必要なアノテーションとリスナー コンテナを備えたメッセージ駆動型 POJO のサポートも提供します。ここには Spring AMQP との明らかな類似点がありますが、このモジュールは特に Kafka に適応されています。Spring Kafka の接続例はここで見ることができます。

春のクレドハブ

Cloud Foundryプラットフォームで実行されている CredHub サーバーから認証情報を保存、取得、削除するためのクライアント側のサポートを提供します。 CredHub - さまざまな種類の認証情報を安全に保存、作成、取得、削除するための API を提供します。Spring CredHub は CredHub API の Java バインディングを提供し、Spring アプリケーションと CredHub を簡単に統合できるようにします。

春のFLO

これは、パイプライン用のシンプルな HTML5 埋め込み可能なビジュアル デザイナーと、ストリーミング データとバッチ データを監視するためのシンプルなグラフを提供する JavaScript ライブラリです。このテクノロジーのデモは、リンクのビデオにあります。

春のLDAP

このライブラリは LDAP 操作を簡素化し、Spring JdbcTemplate に基づいています。このフレームワークでは、コンテキストの検索と終了、結果の表示、値のエンコード/デコード、フィルターなどが可能です (Spring Jdbc と同じ原理に基づいて構築されています)。 Spring LDAP の実装例は、ここにあります。

スプリング・ルー

このモジュールは、Spring ベースのアプリケーションを作成および管理できる RAD ツールを提供します。その目標は、Java 開発者の生産性を向上させることです。アプリケーションのビジネス ロジックを記述することはできませんが、構成やインフラストラクチャに関するものは処理できます。

スプリングシェル

このライブラリを使用すると、Spring Shell jar を利用し、独自のコマンド (Spring Bean のメソッドとして提供される) を追加することで、フル機能のシェル (コマンド ラインとも呼ばれる) アプリケーションを簡単に作成できます。コマンド ライン アプリケーションの作成は、プロジェクトの REST API と対話したり、ローカル ファイル コンテンツを操作したりする場合などに便利です。詳細については、こちらこちらをご覧ください。

スプリング ステートマシン

このモジュールを使用すると、アプリケーション開発者はSpring アプリケーションでステート マシンの概念を使用できるようになります。この機能の使用例の詳細については、ここここを参照してください。

スプリングボールト

Spring Vault は、シークレットへのアクセス、保存、取り消しのための、おなじみの Spring 抽象化とクライアント側のサポートを提供します。Vaultと対話するための低レベルと高レベルの両方の抽象化を提供し、ユーザーをインフラストラクチャの懸念から解放します。 Spring Vault の実装例 Spring について知っておくべきこと: 歴史、主要なモジュール、Java EE - 10 との比較「これをすべて学ぶ必要がありますか?」-あなたは驚いて尋ねます。 怖がらないでください!これは間違っています!より正確に言えば、まったくそのようなものではありません。これは Spring で利用可能なテクノロジーの完全なリストです。初心者が知っておくべきテクノロジーのリストは、さらに控えめなものです。
  • スプリングコア
  • スプリングブーツ
  • Spring Web (MVC および REST)
  • Spring データ (Spring ORM、Spring JDBC、Spring JPA)
  • 春のテスト
プロジェクトでよく使われる他のテクノロジもありますが、その複雑さのため、通常は環境に優しい初心者ではなく、より経験豊富な開発者によって扱われます。ただし、初心者にとっては、少なくとも次のことについて一般的に理解しておくことも役立ちます。
  • スプリングセキュリティ
  • 春のAOP
  • 春の雲
他のテクノロジーはそれほど頻繁に使用されないため、真剣に勉強する必要があるのは、特定のプロジェクトに取り組む場合のみです。ちなみに、Java 開発者が知っておくべきことの完全なチェックリストは、私の他の記事で見つけることができます。今日はここまでです。また会いましょう! Spring について知っておくべきこと: 歴史、主要なモジュール、Java EE - 11 との比較
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION