スリープラスの徳永です。
今回は普段の業務で使用しているSpring bootについて、仕様や特徴について書いていこうと思います。
1. Springの概要
Spring Framework は、Javaでのアプリケーション開発を効率化するためのオープンソースフレームワークです。
Spring Framework を使用することで、Springに備わっている機能の拡張性を利用して、細やかな仕様変更や多様な開発プロジェクトに対応できる柔軟性があり、DI(依存性注入)やAOP(アスペクト指向プログラミング)などの概念で構築されており、こちらを使用することで開発や修正も容易にしてくれます。
また、Spring系のライブラリと統合されているため、環境構築の手間を大幅に削減することが可能です。
しかし、豊富なフレームワークによって幅広い開発力を実現している反面、Spring Frameworkには「機能の使い分けが困難」といったデメリットもあります。
Spring プロジェクトの一覧

2. Spring bootの特徴
Spring Bootとは、Spring Frameworkをより簡単に活用できるように設計されたフレームワークです。
Spring Bootの特徴について、以下の2点があげられます。
1点目は、Bean定義やXML設定などを可能な限り自動設定する機能が搭載されている点です。
これによって、環境構築や設定作業を大幅に省略することができる特徴があります。
2点目はアノテーションが記述できる点です。
アノテーションとはプログラムに記述することにより、コンパイラで出力される警告メッセージを抑制したり、実行環境によってプログラムの動作を変更したりできます。
これによって、記述ミスの防止やコードの一貫性保持し、メタ情報の埋め込みによりプログラムの動作を柔軟に制御することが可能となります。
よく使用されるアノテーションは以下のものがあります。

3. DI(依存性注入)とは
続いてはSpringの概要であげた DI(依存性注入)について説明します。
DIは、Springが提供するオブジェクトのインスタンス管理の仕組みであり、DIコンテナと呼ばれる仕組みによってオブジェクトを管理します。
このDIの利点として、一つのインスタンスを再利用することでメモリ利用を最適化できること、Mockクラスを使用することで単体テストが容易になること、Springがインスタンスのライフサイクル管理を自動で行うことが挙げられます。
しかし、DIは基本的にSingleton(そのクラスのインスタンスは1つしか存在できない)のため、状態を保持するようなクラスのDIは避けるべきといった注意点もあります。
■DIの例
実際にDIをした場合の例は以下の通りです
CatController.java

上記のCatServiceImplのインスタンスはcatメソッドが呼ばれる度に生成されます。
これは1万回リクエストがあれば、1万回インスタンスが生成されることを意味し、メモリの利用効率が悪いです。
また、上記のコードを単体テストしたい場合、CatServiceImplクラスがまだ出来ていなければ単体テストができません。
このような問題点を解決するのがDI(注入)です。
CatServiceImplをDIするように変更
CatController.java

CatServiceImpl.java

AOP(アスペクト指向プログラミング)とは
最後にAOP(アスペクト指向プログラミング)について説明します。
AOPとは、プログラム内の共通処理を一元化して管理するプログラミング手法です。
共通処理はアスペクトとして定義され、個々のメソッド内に直接記述する必要がなくなるため、よりシンプルなコードを実現できます。
例えば、ログ出力のような共通の処理があった場合、それを抽出して必要な箇所に注入してくれるため、その都度メソッドの処理を書く必要がなくなります。
この手法を用いることで、コードの可読性が向上し、保守や管理がしやすくなるメリットがあります。
また、オブジェクト指向の利点を維持しながら共通処理の管理が可能になるため、記述量の削減にも貢献します。
■イメージ図

最後に
以上、Springについて簡単に紹介させていただきました。
これまで記載してきたようにSpring Frameworkはとても便利で開発を効率的にしてくれる機能が多くあります。
その反面、しっかりと理解していなければそれらの機能を使いこなせないといった課題があるのも事実です。
私もまだ勉強中の身ですが、仕様を理解することで改良点が見えてきたり、知識不足で上手くいかないことがあったりと、しっかりした知識を取り入れることの重要性を実感しています。
今回の紹介したもの以外にもたくさんの仕様があるので、記事で興味を持った方は是非調べてみてください。

