はじめに
本記事では Spring の基本概念を整理したうえで、Spring Boot を中心に“実務で使われる部分”を応用編として解説します。
「DI / AOP は聞いたことがあるが、実務でどう使われているか分からない」
「Spring Boot は便利だが、何が“Boot”なのか説明できない」
「設定が少ない理由を理解しないまま使っている」
という状態の方も多いのではないでしょうか。
Spring Framework とは
Spring Framework は一言でいうと、
Java アプリケーション開発を疎結合・高拡張にするための基盤フレームワーク
です。
Spring の中核となる考え方
Spring の設計思想は、主に以下の 3 点に集約されます。
1. DI(Dependency Injection)
依存関係をクラス内部で生成せず、外部から注入する設計
・テストしやすい
・実装の差し替えが容易
・責務が明確になる
→ 大規模開発・長期運用に強い
2. AOP(Aspect Oriented Programming)
共通処理を横断的に分離する考え方
・トランザクション管理
・ログ出力
・認証・認可 など
→ 「業務ロジックに集中できる」設計
@Transactional
public void updateUser(User user) {
// ビジネスロジックのみ
}
3. コンテナ(ApplicationContext)
Spring は DI コンテナとして動作します。
・Bean の生成
・ライフサイクル管理
・依存関係の解決
を Spring が一元管理します。
※DI コンテナ:
オブジェクト間の依存関係(必要な部品)を管理し、自動で生成・注入(提供)してくれるフレームワーク
なぜ Spring Boot が主流なのか
従来の Spring の課題
・XML / Java Config が多い
・初期設定が煩雑
・Web アプリ起動までが重い
Spring Boot の役割
Spring Boot は、Spring をすぐに使える状態にするための仕組みです。
Spring Boot のコア機能
1. 自動設定
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
この 1 行で以下が自動設定されます。
・Web サーバ(Tomcat)
・DispatcherServlet
・Jackson
・DataSource(条件付き)
2. Starter 依存関係
implementation 'org.springframework.boot:spring-boot-starter-web'
これだけで、
・Spring MVC
・Jackson
・Validation
・Logging
が一括で入る。
3. 組み込みサーバ
Docker / CI/CD との相性が非常に良い
・Tomcat / Jetty / Undertow
・WAR 不要、java -jar で起動
java -jar app.jar
よくある Spring Boot 構成
レイヤードアーキテクチャ例:
controller
└ service
└ repository
└ entity
実務でよく使う Spring Boot 機能
application.yml による環境管理
・環境ごとの差分管理が容易
・プロファイル(dev / stg / prod)対応
spring:
datasource:
url: jdbc:mysql://localhost:3306/app
username: app
password: secret
Validation
public class UserRequest {
@NotBlank
private String name;
@Email
private String email;
}
@PostMapping
public void create(@Valid @RequestBody UserRequest request) {
}
例外ハンドリング
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(RuntimeException.class)
public ResponseEntity<?> handle(RuntimeException e) {
return ResponseEntity.badRequest().body(e.getMessage());
}
}
Spring Boot が向いているケース
・Web API(REST)
・業務システム(BtoB)
・バッチ処理
・マイクロサービス
逆に、軽量な CLI ツールのみなら過剰になる場合もあります。
まとめ
・Spring は DI / AOP / コンテナが本質
・Spring Boot は Spring を実務レベルに引き上げる仕組み
・「なぜ便利なのか」を理解すると設計の質が上がる