はじめに
こんにちは。
少し前にはなりますが、とある企業のセミナーに参加した際に、SpringBootというフレームワークを使っていると知り、気になったので勉強してみました。
復習がてらに、備忘録として記事に残しておこうと思います
今回は概念的な内容になります。
Spring Frameworkってなんぞや
SpringBootを紹介する前に、SpringFrameworkについて説明しておきます
◆ SpringFrameworkについて
- Javaの世界では老舗とも言えるフレームワーク
- DI(依存性注入)を実現するためのもの
- DIをベースに様々な機能を実装して「 統合フレームワーク 」に成長
◆ Spring Frameworkの「DI」とは?
- Dependency Injection(依存性注入)
- オブジェクト間の依存関係を、オブジェクト内のコードに記述せず、
実行時に外部から呼び出す手法
◆ 多数のフレームワークから構成
SpringFrameworkは多数のフレームワークの集合体です。中でも有名なものとして、SpringMVC、SpringRoo、SpringBootなどがあります。
- SpringMVC:Model-View-Controllerアーキテクチャーによる開発
- SpringRoo:Spring MVCを補完するライブラリとして登場
- コードの自動生成機能ライブラリ
- 簡単なコマンドを実行するだけで、アプリケーションの枠組みが自動的にできあがるらしい(Railsみたいなイメージ)
- SpringBoot
◆ SpringBoot誕生
先ほど説明したSpringMVCやSpringRooはどちらも便利そうで良さげに思えますが、問題点もいくつかあります。SpringMVCは、多くのSpring系のライブラリを正確に組み合わせる必要があり、環境構築も大変。SpringRooもある程度は自動化できましたが、やっぱりまだまだ大変、、
そこで登場したのがSpringBootです!
SpringBootは、最良のWebアプリケーション開発を素早く構築するスターターキット的なライブラリです。**Spring Boot = 「Spring MVCの完成形」**と言えます
【SpringBootの特徴】
- 専用のスターターライブラリを設定ファイルに記述するだけで、 一通りのライブラリの読み込み、環境構築が可能
- データベースアクセスなどの機能をほとんど自動化
Spring Bootのメリット
Javaの世界でも「Railsライク」とも言われる、効率的で高速開発ができるフレームワークがたくさん出来てきました。 それでも、「 Spring Boot 」を選ぶ理由は何なのでしょうか?
ここではSpringBootのメリットを5つ紹介します
① 面倒なXML設定ファイルの記述がない
従来のJava EE開発はXMLによる設定ファイルだらけで、入力が面倒であったり、エラーの特定が困難である等、問題も多々ありました。
SpringBootでは 以下のような事でXML設定ファイルの記述を少なくしています。
- Auto-configuration: 各種設定を必要最低限の記述のみで自動設定
- 不足する部分はJavaConfigを追加
- アノテーションによる開発
② アノテーション(注釈)記述による コーディング量の削減
アノテーションとは、"@ Xxx" の形式でコンパイラや実行環境にJava の言語機能としては表現できない事や補足などを伝えるものです。
例:@ before(メソッド実行前に呼び出す)
アノテーションは大きく3つの種類に分けることが出来ます。
マーカーアノテーション:何らかの用途でマークする
単一アノテーション:データーを持つ事ができる
フルアノテーション:複数のデータを持つ事ができる
③ サーバー内蔵方式
一般的なものは、アプリケーションとは別にApache ,Tomcat等のサーバーを準備し、 開発したアプリを追加して動かします。
これに対して、SPringBootにはJavaサーバーが内蔵されており、 直接サーバーを起動して実行します。
④ DIをベースとする一貫した実装
DIをベースとしているため、スッキリしていて分かりやすいのもSpringBootの特徴です
- 数多くのライブラリがあっても、基本的な設計思想は一貫している
- 新しいライブラリが追加されても覚え直す必要なし
- テスト時のインスタンスの差し替え可能
⑤ AOP( アスペクト指向プログラミング )
AOPとは、プログラミングを別の視点、側面から考えていこうよ!っていうプログラミング手法です。
オブジェクト指向の時、オブジェクト単位に処理を上手く分解できない...どうしよう...
複数のオブジェクトで同じ操作が散在してしまう.....えらいこっちゃ...
こんな悩みを抱える事があります ( この状態を「横断的関心事」って言うらしいです)
そんな時はAOP!!
アスペクトというモジュールに分離します。AOPによって、オブジェクト指向ではカバーできない部分をカバーする事が出来ます
⑥ STS ( Spring Tool Suite)
一般的なフレームワーク「本体は提供するから、あとはそれぞれで自由に使ってくれ」 っていうスタンスですが、Spring Bootはフレームワーク本体に加えて**専用開発ツール(STS)**も提供しています。
【STSの特徴】
- ベースは「 Eclipse 」で、Spring Framework利用のためのプラグインが追加されている
- 必要な処理が自動化され、コードの作成のみに注力できる
- ここまで環境整備を行っているフレームワークはSpring Framework以外にはほぼ無い(らしい)
Spring Bootは「 十分条件 」ではない
フレームワークが提供するのは「プレゼンテーション層」の部分です。MVCにおける、View(画面)、Controller(全体の制御)の部分のみを提供します。つまり、ただ「仕組みがある」というだけで、別の技術も必要になってくるのです...
例えば、データベース関連ではSpring Data JPAやSpring Data MongoDBが必要ですし、画面実装にはテンプレートエンジン( Thymeleaf )というモノも使われます。
おわりに
ここまで、SpringBootについて紹介してきました。まとめます
- SpringBootでは、主にSpring Frameworkのフレームワークを組み合わせて開発
- 複雑な設定処理の記述が必要ない
- SpringBootを使えば、従来よりも簡単に素早く Webアプリケーションを開発できる
最後まで読んでいただきありがとうございます
間違っている点などございましたら、ご指摘いただけると嬉しいです!
参考文献
今回は主に「Spring Boot2 プログラミング入門」を参考にまとめさせていただきました。初心者にも分かりやすく説明してくれているので、興味のある方は是非