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
660
簡易 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
150
Fast API を用いた Web API の開発
ryounasso
1
340
テストゼロの個人開発プロジェクトにテストを導入した話
ryounasso
0
170
TypeScript_コンパイラの内側に片足を入れる
ryounasso
3
550
kintone新機能開発のお仕事
ryounasso
2
73
Other Decks in Programming
See All in Programming
How to use Macrobenchmark
veronikapj
0
160
大規模マルチテナントを解決するYugabyteDBという選択肢
nnaka2992
1
250
ドメイン駆動設計の実践
masuda220
PRO
17
5.1k
Mastering Developer Experience: A Roadmap for Success 【開発生産性Conference 2024】
findyinc
1
380
Product Management LT会_クアンド新家
shinshin
0
210
なぜ宣言的 UI は壊れにくいのか / Why declarative UI is less fragile
uenitty
29
13k
Microservices rules (July 2024) : what good looks like
cer
PRO
0
1.6k
【Go言語】ジェネリクス
tomo1227
0
170
継続的な活動で築く地方エンジニアの道
myamashii
2
350
Play Billing Library 7.0.0 変更点まとめ@potatotips#88
kako351
0
160
最近追加した型の紹介とその振り返り
aki19035vc
0
170
TiDB Serverless ~理想のServerless DBを考える~
soso_15315
1
160
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3.3k
We Have a Design System, Now What?
morganepeng
46
7k
How to Ace a Technical Interview
jacobian
274
23k
Building Your Own Lightsaber
phodgson
101
5.9k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
78
15k
Visualization
eitanlees
139
14k
Six Lessons from altMBA
skipperchong
24
3.2k
A better future with KSS
kneath
231
17k
The Straight Up "How To Draw Better" Workshop
denniskardys
229
130k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
226
52k
The Mythical Team-Month
searls
217
43k
Build your cross-platform service in a week with App Engine
jlugia
227
17k
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