「依存性の注入」って言っているサイトがあるが、日本語わかってんのか?
よく言われる特徴としては、疎結合。これだとようわからんので、かんたんにいうと。今までつながっていた部品をブツブツ区切って、途中のつなぎ役として汎用的に使える部品をはさめるようにしましたってこと。
なんに使うのかというと、一番便利なのが単体テストだろうね。いろいろなテスト条件に基づいてオブジェクトを生成することが可能になるから、テストのパターンの網羅と実行が容易になるから、便利だというのが、そのりゆうです。
ブツブツとDAOやBLなどの層で区切りたいクラスがあれば、変わりになるインタフェースを作製しておいてそれを使うようにする。
もうちょっと、具体的にいうと、
インターフェースとクラスの2つで1つのセットを作ることになるし。
直接newするコードを入れないようにして、外部からロジックをnewしたインスタンスを格納するようにするため、public変数として定義するように記述する。
わかりにくくなったかな?
たとえばDaoとDaoImpl?のクラスがあったとしたら、コードにDaoのアクセサを用意してImplのインスタンスを扱うコードを書かないようにする。
インスタンスは、フレームワークで用意したりする。
たぶん、汎用的な部品のイメージがバネのようなもんだから、Springという名前になったんだとおもう。
実装ではSpringとかSeaser2とかだ
http://www.springsource.org/download
Javaのバージョンによる制限があります。
http://works.dgic.co.jp/djwiki/Viewpage.do?pid=@537072696E674672616D65776F726BE5B08EE585A5E7B7A8
ダウンロードして解凍したらdistというフォルダがあるので、その中のspringをEclipseのパスに通すといいらしい。
spring-framework-2.5.6.SEC01\dist
[Eclipse]-[プロジェクトのプロパティ]-[Javaのビルドパス]-[ライブラリー]-[外部Jarの追加]
https://www.myeclipseide.jp/modules/contents04/index.php?id=32
http://www.ibm.com/developerworks/jp/xml/library/x-springXOM/
http://netforestdevnote.blog26.fc2.com/blog-entry-4.html
http://netforestdevnote.blog26.fc2.com/blog-entry-14.html
http://netforestdevnote.blog26.fc2.com/blog-entry-23.html
http://snowhiro.web.fc2.com/seasar2/seasar2_index.html
Seaser2もブツブツインタフェースで区切って、
設定ファイルで関係付けしてといったぐあい
最大のメリットはSQLの自動生成
S2JDBCとRailsのActiveRecord?は、エンティティとテーブルは同一構造となる点は同様だが、細かいようで重要な違いとしてActiveRecord?は豊富なメタプログラミングを駆使してエンティティの操作に対して豊富なフックを用意しおり様々な介入を行えます、それらを利用してデータ格納先としてのEntityに限定されず比較的ロジックを内部に保持できます。 JPAではエンティティマネージャから返却されるインスタンスはプロキシ化やエンハンスを行いEntityライフサイクル内で限定的な介入を行えますが、一般的にはあまり使われていないようです。対するS2JDBCはエンティティを純粋なPOJOとして扱います。意図しない挙動をしないため解り易いなどメリットと柔軟性のトレードオフで一概にどちらが優れているとは言えません。Seasarシリーズには実用的で便利な2WaySQLがあったり言語特製もふまえ同列で比較出来ない差を感じます!
そういえばHibernateよりCayenneが使いやすいといった意見を見た事があるのを思い出しました。JPA対応とかしてたような気がするのですがJPAエンティティライフサイクルの問題とかHibernateに対する違いってどうなんでしょうね?
Springの2.5までは下記の問題があった。
でもSpring3.0からは改善されている模様。