Spring Frameworkは、Javaの業務アプリケーションで部品の組み立て(DI)と共通処理の差し込み(AOP)を受け持つオープンソースの基盤です。この記事では、名前の似たSpring Bootとの違い、「Apacheのプロダクトか」という疑問への答え、Spring Bootを使わずに動かす最小構成、Tomcatとの対応関係とWARでの配置、2026年10月時点の最新版7.0.10と11月予定の7.1、商用サポートの考え方までを扱います。コード例は、Spring Framework 7.0.10とTomcat 11.0.27・10.1.61で実際に動かした結果を載せています。
まとめ:Spring Frameworkの要点
- Spring Frameworkは土台、Spring Bootはその土台を自動構成して最短で起動する道具です。新規開発はSpring Bootから入るのが実務の標準です。
- ライセンスはApache License 2.0ですが、Apache Software Foundationのプロジェクトではありません。「apache spring」の混同はここから来ています。
- 最新のGA版は7.0.10(2026年10月22日)。7.0系はJava 17以上(本番はJava 25以上を推奨)とJakarta EE 11が前提です。次の7.1系は2026年11月の予定です。
- Spring Framework 7系のWebアプリはTomcat 11以降に置く前提です。6.2系はTomcat 10.1、5.3系は
javaxのTomcat 9が対応先です。 - 6.2系のオープンソースのサポートは2026年6月で終わりました。延長が必要ならBroadcomの商用サポート(Spring Enterprise)で、価格表は公開されていません。
Spring Frameworkとは:DIとAOPを核にしたJavaのアプリケーション基盤
公式リファレンスの概要によると、Springは初期のJ2EE仕様の複雑さへの答えとして2003年に生まれました。1.0の正式版は2004年3月24日に公開されています。当時のJ2EE(現Jakarta EE)は、EJBの決まりごとに合わせるための定型コードと設定が多く、業務ロジックより配管の記述に手間がかかっていました。Springは特定の基底クラスの継承を求めず、普通のJavaオブジェクト(POJO)を部品として組み立てる方式でこの負担を減らしました。
現在の開発はBroadcomが主導しており、ソースはGitHubのspring-projects/spring-frameworkで公開されています。Spring Boot、Spring Security、Spring Data、Spring Cloudなどの周辺プロジェクトは、すべてこのSpring Frameworkの上に載っています。
Apacheとの関係:Apache License 2.0で配布される別組織のOSS
「apache spring framework」と検索されることがありますが、SpringはApache Software Foundation(ASF)のプロジェクトではありません。混同の理由は2つあります。1つはライセンスで、Spring FrameworkはApache License 2.0で配布されています。このライセンスはASF以外の多くのOSSも採用しており、ライセンス名は開発元を表しません。もう1つは、Springと一緒に使われることが多いApache TomcatがASFの製品であることです。Tomcatそのものの仕組みはApache Tomcatとはで解説しています。
Apache License 2.0なので、商用製品に組み込んで配布してもライセンス料はかかりません。再配布時はApache License 2.0の第4条に従い、ライセンスの写しを提供します。変更したファイルには変更の告知を付け、派生物のソース配布では関連する権利表示を保持し、元の配布物にNOTICEが含まれる場合は関連する帰属表示も読み取れる形で提供する必要があります。
Spring Frameworkのコア機能:DI・AOP・データアクセス・Web
Spring Frameworkは20前後のモジュールに分かれていますが、使い始めに押さえるのは次の4系統です。
DIとIoCコンテナによるBeanの生成・コンストラクタ注入
DIは、クラスが必要とする部品を自分でnewせず、外から受け取る仕組みです。部品の生成と受け渡しを受け持つのがIoCコンテナ(ApplicationContext)で、@Componentや@Serviceを付けたクラスをBeanとして管理し、コンストラクタ引数に合う型のBeanを注入します。依存先を差し替えられるので、テストではモックに置き換えられます。コンテナの動きとBeanのスコープはIoCコンテナとはで、注入に使うアノテーションはSpring Bootのアノテーション一覧で整理しています。
Spring AOPによる共通処理の適用と自己呼び出しの制約
AOPは、ログ出力・トランザクション・権限チェックのように多くのメソッドへ共通して差し込みたい処理(横断的関心事)を、業務ロジックから切り離して一括で適用する仕組みです。差し込む処理を「アドバイス」、適用先の条件を「ポイントカット」として定義します。SpringのAOPはプロキシ経由で動くため、同じクラスの中から自分のメソッドを呼ぶと@Transactionalが効かないという落とし穴があります。仕組みと回避策はAOP(アスペクト指向プログラミング)とはで詳しく扱っています。
JdbcClient・JPAによるデータアクセスと宣言的トランザクション管理
JDBCの接続・例外処理を吸収するJdbcClient(従来のJdbcTemplateも利用可)と、JPA(Hibernate)との統合を提供します。@Transactionalを付けたメソッド単位でコミットとロールバックを宣言でき、パラメータをバインドするAPIを使えば文字列連結によるSQLインジェクションも避けられます。7.0ではJPA 3.2とHibernate ORM 7.1/7.2に対応しました。
Spring MVCとWebFluxの処理方式と選択基準
Web層は、サーブレット上で同期的に処理するSpring MVCと、ノンブロッキングで処理するSpring WebFluxの2系統です。業務画面やREST APIの大半はSpring MVCで足ります。WebFluxを検討するのは、多数の同時接続やストリーミングを扱い、データアクセスなどの処理もノンブロッキングにそろえられる場面です。JDBCやJPAなどのブロッキングAPIが中心なら、まずSpring MVCを選びます。それぞれの使い方はSpring MVCとはとSpring WebFluxとは、認証・認可はSpring Securityとはにまとめています。
Spring FrameworkとSpring Bootの違い
Spring Bootも「フレームワーク」と呼ばれますが、役割はSpring Frameworkを使いやすくするための上位層です。依存関係に応じた設定を自動で組み、Tomcatなどのサーバーを組み込んだ実行可能jarを作ります。両者は競合ではなく、Spring Boot 4.1.2はSpring Framework 7.0.10を内部で使います。
| 観点 | Spring Framework | Spring Boot |
|---|---|---|
| 役割 | DI・AOP・Web等の土台 | 土台の自動構成と起動 |
| 設定 | Java Config等を自分で書く | starter依存で自動構成 |
| Webアプリの配置 | 外部コンテナへ配置 | 組み込み/外部コンテナ |
| 成果物 | WAR/jar | 実行可能jar/WAR |
| 最新GA(2026年10月) | 7.0.10 | 4.1.2 |
新規開発ではSpring Bootから始めます。Spring Frameworkを直接構成するのは、Bootを導入しない既存構成を維持する場合や、ライブラリとしてDIだけを使いたい場合です。外部TomcatへのWAR配置はSpring Bootでも選べます。Spring Bootの4系の変更点はSpring Boot 4とは、版ごとのサポート期限はSpring Bootバージョン一覧とサポート期限で確認できます。
Spring Bootなしの最小構成:spring-contextによるDIの実行例
Spring Frameworkの中身を確かめるには、Spring Bootを使わずspring-contextだけで動かすのが近道です。Mavenではspring-framework-bomを読み込むと、各モジュールの版がそろいます。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>7.0.10</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
</dependencies>
次のコードをsrc/main/java/demo/App.javaとして保存します。pom.xmlではコンパイル対象をJava 17以上に設定し、実行時のクラスパスにコンパイル済みクラスとspring-contextの推移依存jarを含めます。この1ファイルで、リポジトリをサービスへコンストラクタ注入し、結果を表示します。
package demo;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
@Configuration
@ComponentScan
public class App {
public static void main(String[] args) {
try (var ctx = new AnnotationConfigApplicationContext(App.class)) {
GreetingService service = ctx.getBean(GreetingService.class);
System.out.println(service.greet("Spring"));
}
}
}
@Repository
class GreetingRepository {
String template() { return "Hello, %s!"; }
}
@Service
class GreetingService {
private final GreetingRepository repository;
GreetingService(GreetingRepository repository) { // コンストラクタ注入
this.repository = repository;
}
String greet(String name) { return repository.template().formatted(name); }
}
JDK 25(コンパイル対象はJava 17)で実行するとHello, Spring!と表示されました。このときMavenが取り込んだjarは9本で、spring-core・spring-beans・spring-aop・spring-expressionのほか、commons-logging 1.3.5、null安全の注釈jspecify 1.0.1、観測用のmicrometer-observationが入ります。7.0で独自のログ層(spring-jcl)が廃止され、Apache Commons Loggingを直接使うようになったためです。
TomcatでSpring Frameworkを動かす:対応版とWARデプロイ
Spring Bootで組み込みTomcatを使う構成なら、Tomcatを別に用意する必要はありません。Spring Bootでも、WARを外部Tomcatへ配置する構成を選べます。外部のTomcatを使うのは、社内のアプリケーションサーバーにWARをまとめて配置する運用を続ける場合です。このときは、Spring Frameworkの世代とTomcatのメジャー版を合わせることが最初の確認点になります。
Spring Frameworkの世代ごとの対応Tomcat
| Spring Framework | Servlet | 名前空間 | 対応Tomcat |
|---|---|---|---|
| 7.0/7.1 | 6.1 | jakarta | 11.0以降 |
| 6.2 | 6.0 | jakarta | 10.1 |
| 5.3 | 4.0 | javax | 9.0 |
Spring Framework 7.0のリリースノートは、Servlet 6.1とWebSocket 2.2を新しい前提とし、「Tomcat 11+ and Jetty 12.1+」のような新しいServletコンテナに配置するよう求めています。Undertowは、Servlet 6.1に対応していないことを理由に専用サポートが外されました。Spring Bootも同じ組み合わせで、4.1.2の組み込みTomcatは11.0.27、3.5.16の組み込みTomcatは10.1.55です。Tomcat側の各版のサポート期限はTomcatのバージョン一覧とサポート期限にまとめています。
web.xmlを書かずにWARを作る手順
Spring MVCのWARは、web.xmlの代わりにDispatcherServletを登録するクラスを1つ置けば作れます。pom.xmlでは<packaging>war</packaging>を指定し、spring-webmvcと、スコープをprovidedにしたjakarta.servlet-api 6.1.0を依存に加えます。Servlet APIはTomcatが持っているので、WARには入れません。BOMの読み込みは前章と同じで、WARの名前はfinalNameで決めます。
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>6.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>hello</finalName>
</build>
src/main/java/demoに、DispatcherServletを登録するクラス、MVCの設定クラス、コントローラーの3つを置きます。
package demo;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
// web.xml の代わりに DispatcherServlet を登録する
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() { return null; }
@Override
protected Class<?>[] getServletConfigClasses() { return new Class<?>[] { WebConfig.class }; }
@Override
protected String[] getServletMappings() { return new String[] { "/" }; }
}
package demo;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
@Configuration
@EnableWebMvc
@ComponentScan
public class WebConfig {
}
package demo;
import org.springframework.core.SpringVersion;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(jakarta.servlet.http.HttpServletRequest req) {
return "Spring " + SpringVersion.getVersion() + " on " + req.getServletContext().getServerInfo();
}
}
mvn packageでできたtarget/hello.warをTomcatのwebappsへコピーすると、コンテキストパスが/helloになります。既定のポート8080ならhttp://localhost:8080/hello/helloへアクセスすると、Spring 7.0.10 on Apache Tomcat/11.0.27のように、使っているSpringとTomcatの版が返ります。
Tomcat 10.1での最小構成の実測結果と、7系でTomcat 11を選ぶ理由
同じWARを、Spring Frameworkの版とTomcatの版を変えて配置し、応答を確かめました。
| WARのSpring | Tomcat | 結果 |
|---|---|---|
| 7.0.10 | 11.0.27 | HTTP 200 |
| 7.0.10 | 10.1.61 | HTTP 200 |
| 6.2.19 | 10.1.61 | HTTP 200 |
| 6.2.19 | 11.0.27 | HTTP 200 |
4通りとも起動し、ログにエラーも出ませんでした。ただし、コントローラー1本の最小構成で確かめただけです。Spring Framework 7はServlet 6.1を前提に作られており、Tomcat 10.1(Servlet 6.0)は公式の前提から外れます。Servlet 6.1で入ったAPIに触れる機能で失敗しても、不具合として扱われない組み合わせです。「10.1で動いたから移行は後でよい」とは判断せず、Spring Framework 7へ上げるときはTomcatも11へ上げてください。6.2系をTomcat 11に置く組み合わせでも今回の最小構成は動きましたが、6.2系のOSSサポートはすでに終了しています。本番で継続する場合は、商用サポートの契約範囲と対象アプリケーションの互換性を別途確認してください。
最新版とバージョン別の要件:Spring Framework 7.0と7.1
2026年10月28日時点の最新GA版は、2026年10月22日公開の7.0.10です。同じ日に7.1.0-RC1も公開されました。公式wikiのSpring Framework Versionsは7.1系の開始を2026年11月とし、GitHubのマイルストーンでは7.1.0の期日が11月19日に設定されています。
| 系列 | 位置づけ | JDK | Jakarta EE |
|---|---|---|---|
| 7.1 | 2026年11月予定 | 17〜25以降 | 11(12に先行対応) |
| 7.0 | 現行(2025年11月〜) | 17〜25以降 | 11(12に先行対応) |
| 6.2 | OSSサポート終了(2026年6月) | 17〜25 | 9〜10 |
| 5.3 | OSSサポート終了(2024年8月) | 8〜21 | Java EE 7〜8(javax) |
7.0系は2025年11月に始まった新世代で、下限をJava 17に据えたまま、本番ではJava 25以上を推奨しています。主な追加はSpring MVC/WebFluxのAPIバージョニング、HTTPインターフェースクライアントの設定簡略化、@Retryableや@ConcurrencyLimitによる再試行・同時実行制限、JSpecifyによるnull安全の注釈です。7.1のプレビュー版リリースノートには、HTTP QUERYメソッドへの対応、JPA 4.0とHibernate ORM 8.0への対応拡大、Jackson 3.1への下限引き上げが並んでいます。
6.2から7.0へ上げるときに止まりやすい箇所
移行で最初に引っかかるのは、7.0でjavax.annotationとjavax.injectの注釈への対応が外れたことです。javax.annotation-apiのjarを依存に残していればコンパイルは通るため、気づきにくい変更です。javax.annotation.PostConstructとjakarta.annotation.PostConstructを付けたメソッドを並べて起動すると、6.2.19では両方が呼ばれ、7.0.10ではjakarta側だけが呼ばれました。エラーも警告も出ないまま、初期化処理が飛ばされます。javax.inject.Injectも同じく処理対象から外れています。jakarta.annotation/jakarta.injectへ置き換えてから上げてください。あわせて、Tomcat 11(Servlet 6.1)への移行、Undertow利用時のTomcatかJettyへの切り替えが必要です。Spring Bootでの移行手順はSpring Boot 4とはで、3.5から4.1へ上げたときに出たエラーとあわせて解説しています。
商用サポート(Spring Enterprise)と有償サポートの価格
Spring本体は無償ですが、系列ごとにオープンソースとしてのサポート期限があります。6.2系は2026年6月で終わり、最後のOSS版は2026年6月8日の6.2.19でした。期限を過ぎた系列でセキュリティ修正を受け続けたい場合に選ばれるのが、Broadcomの商用サポートです。2026年10月28日時点の公式サイトでは「TrueSource Spring Enterprise」と表記されています。
対象は50を超えるSpringのプロジェクトと、OpenJDK(BellSoftのLiberica)・Apache Tomcatで、24時間365日の問い合わせ窓口が付きます。サポートポリシーでは、各マイナー系列をOSSのサポート終了日から12か月延長し、メジャー世代の最後のマイナー系列(例として5.3)にはさらに5年のエンタープライズサポート期間を上乗せするとしています。6.2系は第6世代の最後の系列なので、この上乗せの区分に入ります。修正版は専用のMavenリポジトリから配布されます。公式サイトに価格表は無く、問い合わせ窓口のみなので、金額はBroadcomか販売パートナーに見積もりを取って確かめます。
判断の目安は、利用するFrameworkやBootの各系列のOSSサポート期限までに、必要なバージョン更新と回帰テストを完了できるかどうかです。更新を継続できる体制でも、移行・回帰テストの工数と商用サポートの見積額を比較して費用を判断します。金融・公共など、期限後もしばらく現行版を止められない要件がある組織で、商用サポートの費用が見合います。
Spring開発の学習順と、小規模開発で避けたい過剰な構成
学習は依存関係の順に進めると回り道が減ります。Javaのクラス・インターフェース・ジェネリクスを押さえてから、DIとBean、Spring Bootの自動構成とapplication.yml、Spring MVCでのREST APIとSpring Data JPAでの永続化、最後にSpring Securityの認証・認可へ進みます。フロントエンドと組み合わせる構成は、Spring BootとReactの連携方法でCORSとJWT認証まで扱っています。
一方で、数画面のCRUDだけの社内ツールにマイクロサービスやWebFluxを持ち込むのは過剰です。複数のチームで1つの業務システムを育てるなら、最初はモノリスのままモジュール境界を固め、Spring Modulithで境界を検証してから分割を考えるほうが失敗しにくくなります。Javaでの業務システムを要件定義から任せたい場合は、一創のフルスクラッチ開発でもSpringを使った開発を承っています。
よくある質問
Spring Bootはフレームワークですか?
Spring Bootもフレームワークと呼ばれますが、Spring Frameworkの上に載る上位層です。DIやWebの機能そのものはSpring Frameworkが持ち、Spring Bootはそれらの設定を自動で組み、組み込みサーバーごと起動できるようにします。
Spring Frameworkの最新バージョンは何ですか?
2026年10月28日時点の最新GA版は7.0.10(2026年10月22日公開)です。次の7.1系は7.1.0-RC1が公開済みで、GitHubのマイルストーン上の期日は2026年11月19日です。Spring Bootの最新GA版は4.1.2で、内部では7.0.10を使います。
Spring FrameworkはApache製ですか?
いいえ。ライセンスはApache License 2.0ですが、Apache Software Foundationのプロジェクトではなく、Broadcomが主導して開発しています。ASFの製品であるApache Tomcatと一緒に使われることが多いため、混同されがちです。
Spring Framework 7はTomcat 10で動きますか?
公式の前提はTomcat 11以降です。コントローラー1本の最小構成のWARはTomcat 10.1.61でもHTTP 200を返しましたが、Servlet 6.1を前提とする機能は動作の保証がありません。Spring Framework 6.2系ならTomcat 10.1が対応先です。
Spring Frameworkの商用サポートの価格はいくらですか?
Broadcomの商用サポート(TrueSource Spring Enterprise)は公式サイトに価格表が無く、問い合わせによる見積もりです。OSSのサポートが終わった系列を12か月延長する延長サポートや、修正版を配布するMavenリポジトリが含まれます。
関連記事
- Spring Boot 4とは?最新バージョン4.1の変更点・新機能とSpring Boot 3との違い【2026年10月】
- Spring Bootバージョン一覧とサポート期限(EOL)【2026年10月】最新版は4.1、4.0の無償サポートは12月末終了
- Apache Tomcatとは?サーブレットコンテナの仕組みとApacheとの違い・対応Java版・インストール手順
- IoCコンテナとは?制御の反転の仕組みとSpring IoCコンテナ・Beanのスコープとライフサイクルを動くコードで解説
- AOP(アスペクト指向プログラミング)とは?Spring AOPの仕組みと使い方・自己呼び出しの落とし穴