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
1k
簡易 DI コンテナを作って DI コンテナを知る
簡易 DI コンテナを作ることで、DI コンテナの仕組みについて調べてみました。
ryounasso
December 13, 2023
Tweet
Share
More Decks by ryounasso
See All by ryounasso
開発効率向上のためのリファクタリングの一歩目の選択肢 ~コード分割~ / JJUG CCC 2024 Fall
ryounasso
0
2.3k
Clean Architecture by TypeScript & NestJS
ryounasso
0
690
Fast API を用いた Web API の開発
ryounasso
0
480
テストゼロの個人開発プロジェクトにテストを導入した話
ryounasso
0
380
TypeScript_コンパイラの内側に片足を入れる
ryounasso
3
710
kintone新機能開発のお仕事
ryounasso
2
110
Other Decks in Programming
See All in Programming
アーキテクトと美学 / Architecture and Aesthetics
nrslib
12
3.1k
SLI/SLOの設定を進めるその前に アラート品質の改善に取り組んだ話
tanden
2
730
小さく段階的リリースすることで深夜メンテを回避する
mkmk884
2
130
List とは何か? / PHPerKaigi 2025
meihei3
0
550
신입 안드로이드 개발자의 AI 스타트업 생존기 (+ Native C++ Code를 Android에서 사용해보기)
dygames
0
500
requirements with math
moony
0
520
PHPのガベージコレクションを深掘りしよう
rinchoku
0
240
AIエージェントを活用したアプリ開発手法の模索
kumamotone
1
740
goにおける コネクションプールの仕組み を軽く掘って見た
aronokuyama
0
140
Node.js, Deno, Bun 最新動向とその所感について
yosuke_furukawa
PRO
6
3k
Modern Angular:Renovation for Your Applications @angularDays 2025 Munich
manfredsteyer
PRO
0
130
パスキーのすべて / 20250324 iddance Lesson.5
kuralab
0
120
Featured
See All Featured
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.6k
Statistics for Hackers
jakevdp
798
220k
Optimising Largest Contentful Paint
csswizardry
35
3.2k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
12k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.5k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
118
51k
Java REST API Framework Comparison - PWX 2021
mraible
29
8.5k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.4k
Thoughts on Productivity
jonyablonski
69
4.5k
It's Worth the Effort
3n
184
28k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
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