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
560
簡易 DI コンテナを作って DI コンテナを知る
簡易 DI コンテナを作ることで、DI コンテナの仕組みについて調べてみました。
ryounasso
December 13, 2023
Tweet
Share
More Decks by ryounasso
See All by ryounasso
Fast API を用いた Web API の開発
ryounasso
0
60
テストゼロの個人開発プロジェクトにテストを導入した話
ryounasso
0
110
TypeScript_コンパイラの内側に片足を入れる
ryounasso
3
460
kintone新機能開発のお仕事
ryounasso
2
56
Other Decks in Programming
See All in Programming
Kotlin Multiplatform at Stable and Beyond (Android Makers 2024)
zsmb
0
460
Ruby GitHub Packages
bkuhlmann
0
640
Amazon SQSコンシューマー疎結合への旅 - 出張! #DevelopersIO IT技術ブログの中の人が語る勉強会 #3
quiver
0
300
Git Lint
bkuhlmann
4
760
Code Reviews
bkuhlmann
4
900
try! Swift Tokyo 2024 参加報告 / try! Swift Tokyo 2024 Report
hironytic
0
220
Tailwind CSSを本気でカスタマイズする方法
fsubal
14
5.5k
Let's learn code review
riofujimon
2
570
検証も兼ねて個人開発でHonoとかと向き合った話
hanetsuki
1
1.3k
OpenAPIを中心に考えるAPI開発入門 / Introduction to API Development with a Focus on OpenAPI
seike460
PRO
2
170
From Spring Boot 2 to Spring Boot 3 with Java 21 and Jakarta EE
ivargrimstad
0
480
ゆるい個人開発のススメ
kuroppe1819
10
1k
Featured
See All Featured
The World Runs on Bad Software
bkeepers
PRO
61
6.7k
For a Future-Friendly Web
brad_frost
172
9k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
323
20k
Into the Great Unknown - MozCon
thekraken
14
1k
Git: the NoSQL Database
bkeepers
PRO
423
63k
Done Done
chrislema
178
15k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
21
1.9k
How To Stay Up To Date on Web Technology
chriscoyier
782
250k
Creatively Recalculating Your Daily Design Routine
revolveconf
211
11k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
188
16k
Principles of Awesome APIs and How to Build Them.
keavy
121
16k
Being A Developer After 40
akosma
66
580k
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