https://www.inflearn.com/users/74366/@yhから習った内容を整理しています。
まだ作成中で、個人の勉強に合わせてその都度内容を追加しています。
Spring
SpringFramework
1. 多形性を極大化して利用できるように支援する。
- Javaの長所にもすでに多様性がありましたが、SOLID、良いオブジェクト指向設計の5つの原則をすべて満たすことはできなかった。
-
最初はAppConfigという別の設定クラスを作り、外部で実装オブジェクトを生成して接続する責任を持つようにした。
このように外部からプログラムの制御の流れを管理することをIOC 、制御の逆転といい、外部から実装オブジェクトを生成し、アプリケーション実行時点(ランタイム)にクライアントに接続することをDI、依存関係注入という。
そしてAppConfigのようにオブジェクトを生成して管理しながら依存関係を連結することをIoCコンテナ、またはDIコンテナという。 (アセンブラ、オブジェクトファクトリーなどと呼ばれることもある。)- 短所:開発者がAppConfigを使って直接オブジェクトを生成し依存性を注入しなければならず、Singletonを具現するためには繰り返されるソースを作成しなければならないという問題点があった。(+ Singleton作成時の注意点)
-
そしてSpring Containerを使うようになり、最近はAnnotationベースのJava設定クラスを使ってSpring ContainerにSpring Beanを登録する方法を主に使うが、手動登録方法(@Bean)と自動登録方法(@Component、@Autowired)がある。
- ちなみに @Autowired は自動登録で必須であるだけで、手動と自動登録の両方で使用する。)
- 業務ロジック1はある程度類似したパターン(Controller、Service、Repositoryなど)があり、自動登録することを推奨し、技術支援ロジック2は手動登録して明確に示すことが良い。
- SpringContainerを使った Singleton先にあったSingletonに関する問題を解決してくれた。
2. Spring MVC(Model View Controller)アーキテクチャを提供する。
-
Springを通じて主に作るのがウェブアプリケーションだが、スプリングMVCは複雑なウェブアプリケーションを簡単かつ迅速に開発できるように支援する、最も人気のあるウェブフレームワークだ。
-
SpringMVCの大きな流れ + ([ForwardではなくRedirectをした場合])(https://qiita.com/eunaa2934/items/afde3d2294479d154f89)
-
基本機能としては以下のようなものがある。
-
- 要請を送った時、どのコントロールラーが呼び出されるべきか、どのような方式で処理するかを定義する。
-
リクエスト照会
-
クライアントからサーバに要求データを転送する際に主に使用する方法が3つありますが、
-
1.Query Parameter (GET) と 2.HTML Form (POST) のパラメータ照会は、Http Servlet Request の@Model Atribute、@Request Param、request.get Parameter() を使用する必要がある。
-
3.HTTP message body(POST、PUT、PATCHなど)のRequestパラメータ照会は@RequestBodyを使用して行うことができる.
-
-
レスポンス生成
- サーバーからクライアントに配信するResponseデータを作成する方法は3つがある。
- ちなみにSpringMVCの大きな流れでForwardとRedirectがあるとしたが、ForwardではModelに、RedirectではRedirectAttributeにデータを入れて伝達する。
-
-
その他の活用機能としては、以下のようなものがある。
- ログイン処理機能
- HTTP(Hypertext Transfer Protocol、クライアントとサーバ間の通信のための通信規則セットまたはプロトコル)は無状態(Stateless) プロトコルで要請と応答をやり取りすると接続が切れる。 つまり、クライアントがリクエストをやり直すと、サーバーは以前のリクエストを覚えていない。 しかし、ログイン後にページにアクセスする場合のようにデータを維持しなければならない時がある。この時に使うものとしてCookieとSession、HttpSession(最も推薦)がある。
-
メッセージ、国際化機能
- メッセージを一ヶ所で管理し、地域別に言語を変えることができるよう支援する。
-
Logging機能
- ログインしているかどうかをチェックするロジックのように、共通の関心事(cross-cutting concern)に使いやすいものとして、Servlet FilterとSpring Interceptorがある。
HTTP リクエスト → WAS → Servlet Filter → (Dispatcher) Servlet → Spring Interceptor → Controller
- Servlet Filter はJava EE の一部であり、セキュリティ、ロギング、圧縮などのサブレットレベルでの作業に適している。
- ログイン処理機能