Springとは? | Java Springの逆引きメモ

Java Springの逆引きメモ

JavaのSpring frameworkのメモを書いていきます!
初心者の勉強ノートなので間違いがあるかもしれませんが、何かヒントになることがあれば幸いです。

かなり有名なJavaのフレームワークです!


メインはDIと呼ばれる機能ですが、DIを使用した様々な機能が提供されています。


【提供されている主な機能】

機能名 概要
DI

Dependency Injectionの略。

設定ファイルにクラスを設定することで、設定したクラスをプログラムから取り出せます。

このとき初期化する値を設定ファイルで指定することができます。

つまり、newする処理と初期化処理をプログラムの外に出せます。

アプリケーションを初期化する初期値をプログラムの外にファイル(.ini)として出すことは良くやります。値がハードコーディングされなくなるのでアプリケーションの依存度が下がります。このDI機能は初期化の値だけでなく、初期化するクラス自体をも外に出します。

こうすることでよりそれぞれが依存しない作りになります。

Springの他にもSeasarやEJBでもこの機能を提供しています。

また、Struts2でも似たような機能を提供しているようです。

SpringMVC

MVCの機能を提供します。

機能間の依存度を低くするように設計されており、かなりきれいに作られています。

Strutsで提供されるような機能もほとんどもっています。

DIxAOP

AOPの機能をSpringの設定ファイルで使用できるようになります。

AOPとは簡単にいうと、ソースを変更せずにプログラムを変更する機能です。

どうも、Javaの実行ファイルをメモリにロードするときに、指定の関数の前後に他のプログラムを直接差し込んでいるようです(バイナリに対して)。

AOPの機能自体は、AspectJというフレームワークを使用するのですが、AspectJ自体はプログラムでかなり面倒なことをしないといけないみたいです。

Springはそれを設定ファイルだけで簡単に使用できるようにラップしています。

SpringJDBC

O/Rマッピングを提供します。

O/Rマッピングとは、JavaのオブジェクトとDBのテーブルとを結びつける機能のことです。

イメージとしては、Javaのクラスで会員情報(Member)というクラスがあったとすると、

ormap.save(member);

みたいな感じでDBに保存できたり、

Member member = ormap.find("ID0001");

みたいな感じでDBから取り出せたりするのがO/Rマッピングのイメージです。

Spring以外のものでは、HibernateやiBatisなどがあります。

XMLからJavaのクラスにマッピングするものもあるようです。

(SpringJDBCではできませんが)

SpringSecurity

認証と認可の機能を提供してくれます。

WEBが分かりやすいと思いますが、一般的なWEBは、IDとパスワードを入力して両方とも合っていればログインできると思います。

この処理を認証と呼んでいて、さらに認証できた人に対してある画面を見せるか見せないか、という閲覧権限の機能も存在します。

これを認可と言います。

SpringSecurityでは両方ともを設定ファイルのみで実装できます。

かなりパワフルな機能です。

また、WEBだけでなく普通のJavaアプリケーションに対しても認証と認可の機能を実装できるようです。

SpringWebFlow

WEBの画面遷移を設定ファイルで設定できるようです。

状態をSessionに入れて保存しておくこともできるようで、javascriptのhistory.back()に頼らない「戻る」ボタンを実現したり、遷移を設定ファイル上だけで変更したりできるようです。

これは実際に使ったことが無いので、すみませんが実態が良く分かっていないです。どこかのWEBの記事を読んだ記憶を元にここは書いてます。。すみません。

SpringBatch

主に以下の2つの機能を設定ファイルを記述するだけで実現します。(詳細は左のリンク)

・スケジュールの機能

クーロンのように時間を設定できることと、メソッドを指定するだけで実行してくれるのが特徴です。

この機能は、Java's TimerやQuartzと呼ばれるフレームワークを使用しています。Java's Timerの場合は、クーロンのように時間設定できません。

単純な起動であれば設定ファイルだけでできますが、ちょっと複雑なものはコードを書く必要があり、その作法がかなり面倒なようです。

・バッチ処理の機能

処理の流れを記述することができ、チャンク処理、条件分岐、ループ、並列処理、失敗したところから開始するリスタートなど、様々な機能があります。

ちなみに似たような別のフレームワークに「TERASOLUNA」があります。これもSpringを使用します。

SpringMail

例外発生時などにメールを送る設定ができる機能です。

すみません、まだ使用したことがありません。。

SpringModules

書式の妥当性チェックをする機能を提供します。

Strutsにも書式の妥当性チェック機能はあります。

SpringもStrutsもApacheのCommonsフレームワークを裏では使用していますが、2つの間で微妙に設定ファイルの書き方に違いがあるので注意です。

Strutsとの連携

Strutsと特に制限無く連携できます。

連携の仕方は3つくらいありますが、少し、制限がかかるものもあります。

Hibernateとの連携

Hibernateと特に制限無く連携できるようです。

設定が簡易になるらしいです。

また、Springを使用することでHibernateと祖結合になるので、将来Hibernateから他のものに変更したい場合も、入れ替えしやすくなるようです。

※上記以外にも様々な機能が提供されています。



【補足】

Spring自体はメインでは、DIの機能しか提供していません。

DIを使用することでクラス間やフレームワーク間の独立性が高くなります。

その効果が出るように、他のフレームワークをラップしたり連携したりしているのが、DI以外の機能です。




参考:

DI:依存性の注入とは何か?

Spring Securityでラクラク! セキュリティ対策
バッチ処理はJavaでバッチリ?
Spring Framework 2.5 和訳(日本語訳)

Spring Framework リファレンス(日本語2章まで)
Spring Framework本家のページ
日本Springユーザ会