Spring Frameworkに関する世界観です。Javaの世界観D(Webフレームワーク)も参照のこと。
また、LaravelやSpringなどで最近言われるようになった概念として、「依存性注入」というのがある。
これは、たとえばクラスの中にインスタンスが含まれていた場合、そのクラスはそのインスタンスである別のクラスに「依存」している。
それに対して、依存性注入では、クラスにインスタンスを「外部から、あとからぶち込む(注入する)」ことで、依存性の解決を図る。
外部の設定ファイルで「このクラスのオブジェクトを注入しなさい」と指示するやり方を「DIコンテナ」と呼ぶ。
後から注入すると何が便利なのか。
まず、テストケースを書く際に、クラスの中に別のクラスのオブジェクトが入っていると、それだけでテストケースが書けなくなってしまいます。
なので、テストケースを書くために、あとからインスタンスを注入しよう、というのが、まず大きな点です。
もうひとつ、柔軟性の面から言っても、後から注入したほうが柔軟性があります。
たとえば、依存しているインスタンス変数を後から注入して変えられるようにすると、自分でnewして作ったインスタンスを、別のオブジェクトの中に注入し、「外部からそのインスタンスを受け取る」ことができます。
こうすると、設計が単純になるし、柔軟性も生まれます。それぞれのクラスのオブジェクトが、無限にツリー構造で依存していくのではなく、自分でそれぞれのインスタンスを作って、その「関連性としてのやり取り」によってプログラミングを行えます。
つまり、どんどん無限の依存地獄に入っていくのではなく、それぞれの単体オブジェクトのメッセージのような方法で開発できるのです。
また、このようにすることで、たとえば用途に応じて別のクラスのインスタンスを渡したりできるようになり、カスタマイズがしやすくなります。Javaの継承やインターフェースの考え方を、より体現した形であると言えるのです。
JavaによるWebフレームワークの一つ。DI(依存性注入)とアスペクト指向プログラミングを二つの柱とする。
複数のフレームワークを組み合わせて使うほかのJavaフレークワークに比べて、フルスタックであることで知られる。
Javaのフレームワークは、コントローラのStrutsやWicket、永続化のHibernateなど、さまざまな専門に分かれたフレームワークを組み合わせて使うことが多かった。
これは柔軟ではあるものの、それぞれの役割と用途と方法を覚えながら、組み合わせて使用しなければならないため、いろいろと難しいところがある。
これに対して、Springは各種のコンポーネントの集合であり、これをひとつのフルスタックフレームワークとして使うことができる。
以下のページを参考に執筆しました。
MVC型のフレームワーク。Springから提供されている。Apache Strutsに失望したため、自前のWebフレームワークとして作られた。
Spring MVCでは、@Component(DIコンテナに登録する)、@Service(サービス)、@Repository(DB)、@Controller(コントローラ)などのJavaのアノテーションを使うことで、簡単にMVC開発ができます。
たとえばクラスをコントローラとして指定したいなら@Controllerをつける。
@Controller public class HogeController { ... }
URLリクエストとメソッドは以下のようにマッピングできる。
@RequestMapping('/') @ResponseBody public String index(String pageId) { ... }
このほかにもさまざまなアノテーションがある。
(1.Springframeworkを1からはじめる - Qiitaを参考に執筆・引用しました。)
SpringのサブプロジェクトのRADツール。コマンドラインからさまざまな種類のファイルを生成してくれる。
Springによる、Web開発を簡単にしてくれるBootstrapフレームワーク。
Webフレームワークを参照のこと。
Javaも参照のこと。