- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2023-09-29T11:49:04+09:00","default:irrp","irrp")
#author("2024-03-17T16:03:00+09:00","default:irrp","irrp")
→Java関連
→Spring Framework関連
→詳細設計
#contents
*概要 [#c04ce02c]
*一般 [#s06b00f9]
-DIはinterfaceの変数に対してその実装を用途に応じて挿げ替えるような動作を指すことが多いようだ。(ただし例えばJBoss Seamのバイジェクションなどはクラスに対しても行えるので、interfaceに限る話ではない)
-[[作って理解するDIコンテナ - きしだのHatena>https://nowokay.hatenablog.com/entry/20160406/1459918560]] 2016
-[[Rust の DI を考える — Part 1: DI とは何だったか - paild tech blog>https://techblog.paild.co.jp/entry/2023/03/28/160241]] 2023.3
-[[Introduction to Dependency Injection 「DI」の整理とそのメリット - Speaker Deck>https://speakerdeck.com/revcomm_inc/introduction-to-dependency-injection-di-nozheng-li-tosonomerituto]] 2023.2
--Dependency Inversion も説明あり
-[[JavaのモジュールシステムでSPIとDIを実現するやり方: プログラマの思索>https://forza.cocolog-nifty.com/blog/2022/11/post-7eb252.html]] 2022.11
-[[DI(依存性の注入)×AOP(アスペクト指向)の常識>http://www.atmarkit.co.jp/fjava/rensai4/enterprise_jboss03/01.html]] 2009.11.2
-Javaの@EJBアノテーションもDIの一種です→[[EJB関連]]
-[[DIとAOPがサーバ・コンポーネント技術を変える>http://www.atmarkit.co.jp/fjava/kaisetsu/j2eewatch07/j2eewatch07_1.html]]
--なぜCGIやサーブレットだけでは不十分で、DIコンテナやEJBコンテナが必要な局面があるのでしょうか。その理由としては、主に以下の点が挙げられます。
---リソース・プーリング
---データベース・アクセス
---トランザクション管理
---セキュリティ管理
--Dependency Injectionでは、コンテナ(フレームワーク)が提供するさまざまなサービスを利用する際に、「コンテナのサービスをコンポーネントから呼び出す」のではなく、「コンポーネントに対しコンテナがサービスを注入する」という方法を用いる。これにより、コンポーネントがさまざまなサービスやAPI、またはほかのコンポーネントに依存してしまうことを防ぐ技法だ。
-[[Dependency Injection for Loose Coupling:http://www.codeproject.com/useritems/DependencyInjection.asp]] 2006.4.19
--Loose Coupling =疎結合性のことか?
-[[Dependency Injectionの解説(Java):http://codezine.jp/a/article.aspx?aid=60]]
*JavaEEのCDI [#k7a87bd0]
-[[CDI1.1から追加されたbean-discovery-mode>https://gloryof.hatenablog.com/entry/20131205/1386170095]] 2013
-[[CDI を理解する為に重要なレシピ>http://yoshio3.com/2015/04/15/cdi-essential-recipes/]] 2015.4.15
-[[CDIが業務システム開発にもたらすメリットとは? EJBとの使い分けは?──最新Java EE開発“虎の穴” 第3回 上妻宜人氏>http://builder.japan.zdnet.com/sp_oracle/weblogic/35045391/]] 2014.3.24
-[[Java EEのCDIで定義しておくと便利なプロデューサーとインターセプター>http://d.hatena.ne.jp/nowokay/20131213]] 2013.12.13
-[[CDIを利用したサンプルアプリーケションの作成 >http://codezine.jp/article/detail/6593]]
-[[Seam3:Java EE 6時代のWeb開発>http://thinkit.co.jp/book/2011/03/03/2031]] 2011.3.3
--Java EE 6におけるCDI仕様の概要とそのオープンソース実装であるSeam3/Weldについて概要を説明
-[[Java EE環境におけるCDIのデフォルト化>http://n-agetsuma.hatenablog.com/entry/2013/08/18/130358]] 2013.8.18
-[[Java EE 6: Understanding Contexts and Dependency Injection (CDI), Part 1 >https://blogs.oracle.com/nishigaya/entry/javaee6_understanding_cdi_part_1]]
--[[Part2>https://blogs.oracle.com/nishigaya/entry/javaee6_understanding_cdi_part_2]]
*Seaser [#g5db6df1]
-SAStrutsについては→SAStruts関連
-S2JDBCについては→O/Rマッピング
-S2AOPについては→[[S2AOP]]
-[[Seasar3開発中止>http://d.hatena.ne.jp/higayasuo/20100806/1281080100]] 2010.8.6
-Seasarでスタンドアロンアプリを作るとき
--初期化で
SingletonS2ContainerFactory.init();
--DIしたいときは
hoge = (Hoge) SingletonS2Container.getComponent(Hoge.class);
--終了で
SingletonS2ContainerFactory.destroy();
--もちろんHogeはdiconに設定書く。
-@ResourceはSeasarでインジェクション先となる変数であることを示すアノテーション。ただしSeasarではメンバをpublicにすれば@Resourceををつけなくてもインジェクションされる模様
-[[Seasar Sample Project>http://www.wikiroom.com/oreju/?%A5%B7%A1%BC%A5%B5%A1%BC%A5%B5%A5%F3%A5%D7%A5%EB%A5%D7%A5%ED%A5%B8%A5%A7%A5%AF%A5%C8]]
-[[The Seasar Project>http://www.seasar.org/index.html]]
--DI (Dependency Injection) とAOP (Aspect Oriented Programming) をサポートした軽量コンテナ
--[[機能リファレンス>http://s2container.seasar.org/2.4/ja/DIContainer.html]]
-[[Seasar DI container with AOP>http://cvs.sourceforge.jp/view/seasar/s2-dao/doc/DIContainer.html?revision=1.1]]
-[[DI+AOPを実現するSeasarV2>http://www.atmarkit.co.jp/fjava/rensai3/seasar2_02/seasar2_02_2.html]]
*その他 [#t288a8d9]
-[[[C#]DIコンテナのスコープ範囲を制御する - Qiita>https://qiita.com/jun1s/items/a4ebf7e897dc3cb1fea9]] 2023.9
-[[Python で DI(Dependency Injection) を実現するフレームワークの Injector を使ってみる | DevelopersIO>https://dev.classmethod.jp/articles/python-injector-launch01/]] 2022.11
-[[「DI使うとインタフェース地獄に陥るらしいから使いたくない」と言っていたA氏がインタフェースを使わずにDIで幸せになるまで>https://qiita.com/jun1s/items/55b12c7febd7de6a0a45]] 2021.10
-[[.NETのDIコンテナの簡単なまとめ>http://spring-net.jp/modules/newbb/viewtopic.php?post_id=50&topic_id=20&forum=8]]