Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
簡易 DI コンテナを作って DI コンテナを知る
Search
ryounasso
December 13, 2023
Programming
1
710
簡易 DI コンテナを作って DI コンテナを知る
簡易 DI コンテナを作ることで、DI コンテナの仕組みについて調べてみました。
ryounasso
December 13, 2023
Tweet
Share
More Decks by ryounasso
See All by ryounasso
Clean Architecture by TypeScript & NestJS
ryounasso
0
260
Fast API を用いた Web API の開発
ryounasso
1
370
テストゼロの個人開発プロジェクトにテストを導入した話
ryounasso
0
220
TypeScript_コンパイラの内側に片足を入れる
ryounasso
3
580
kintone新機能開発のお仕事
ryounasso
2
82
Other Decks in Programming
See All in Programming
GoのIteratorに詳しくなってしまう
inatonix
1
170
ゲームボーイアドバンスでSwiftを動かそう
k_koheyi
0
510
僕が思い描くTypeScriptの未来を勝手に先取りする
yukukotani
3
580
メモリ最適化を究める!iOSアプリ開発における5つの重要なポイント
yhirakawa333
0
370
Wallet API, Verifier APIで実現するIDカード on iPhoneの世界
shitamori1272
1
320
大公開!iOS開発の悩みトップ5 〜iOSDC Japan 2024〜
ryunakayama
0
180
私の考える初学者がBlazorできるまでの学習方法
tomokusaba
1
240
【TID2024】模擬講義:プログラマと一緒にゲームをデザインしてみよう!
akatsukigames_tech
0
380
Using Livebook to build and deploy internal tools @ ElixirConf 2024
hugobarauna
0
210
The Future of Frontend i18n : Intl.MessageFormat
sajikix
1
2.4k
LangChainの現在とv0.3にむけて
os1ma
3
650
詳解UIWindow
natmark
3
2k
Featured
See All Featured
A designer walks into a library…
pauljervisheath
201
24k
GitHub's CSS Performance
jonrohan
1029
450k
Visualization
eitanlees
142
15k
Statistics for Hackers
jakevdp
793
220k
Automating Front-end Workflow
addyosmani
1365
200k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
26
1.9k
Optimising Largest Contentful Paint
csswizardry
28
2.7k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
122
18k
Documentation Writing (for coders)
carmenintech
65
4.3k
How GitHub (no longer) Works
holman
309
140k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
278
13k
Web Components: a chance to create the future
zenorocha
308
41k
Transcript
DI コンテナを作って DI コンテナを知る ryounasso
簡易版 DI を作ってみた結果の学びをお話しします 詳しいコードの説明等は省いています🙇
普段から DI 使ってるけど... Spring Boot で DI 使ってるけど、内側がどうなっているのか理解できておらず... 自作して理解してみよう!
DI とは DI (Dependency Injection, 依存性の注入) B C A B
は C に依存している A は B に依存している A の依存対象 この依存関係を外部から確立する
DI とは B C A 全体を把握するのは難しい... D E F
DI とは B C A 組み立てをやってくれる D E F DI
コンテナ クライアント A を使いたい A
そもそもなぜ DI ? Controellr Service Repository xxServiceImpl xxController xxRepository xxService
implements ビジネスロジックがデータアクセス層に依存
そもそもなぜ DI ? Controlelr Service Repository xxServiceImpl xxController xxRepository xxService
implements DI Container Container
大事なのがリフレクションとアノテーション リフレクション クラスなどのメタ情報を扱うことができる Java 標準 API 定義情報などを知ることができるようになる アノテーション ソースコードに注釈をつけるもの @Overried,
@Inject
リフレクション リフレクションを使って、クラスのメタ情報を扱うことで どんなクラスが来ても対応できるようにする フレームワーク側からすると、どんなクラスが来るかわからない
None
アノテーション インジェクトしたいフィールドにアノテーションをつけることで コンテナが認識して、インジェクションを行ってくれる DIContainer.register("bar", Bar.class) 的なことを毎回するのは手間
アノテーション
まとめ DI コンテナの中のざっくりとした処理が理解できた リフレクション・アノテーションの重要性 改めて DI とは何かも復習することができた
参考資料 - 作って理解するDIコンテナ https://nowokay.hatenablog.com/entry/20160406/1459918560 - 【やさしくない!? Java】 リフレクションの話 https://www.youtube.com/watch?v=LR0nSDRR0Ac&list=PL0BiA lg8j4Zu7Uu6Zdrm2dl8g8kU15Qie&index=2