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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
ryounasso
December 13, 2023
Programming
1.4k
1
Share
簡易 DI コンテナを作って DI コンテナを知る
簡易 DI コンテナを作ることで、DI コンテナの仕組みについて調べてみました。
ryounasso
December 13, 2023
More Decks by ryounasso
See All by ryounasso
明日から始めるリファクタリング
ryounasso
0
200
駆け足で Google から学ぶテスト設計の指針
ryounasso
0
180
React inside basics: learn from “build own react"
ryounasso
0
190
抽象データ型について学んだ
ryounasso
0
390
開発効率向上のためのリファクタリングの一歩目の選択肢 ~コード分割~ / JJUG CCC 2024 Fall
ryounasso
0
3.8k
Clean Architecture by TypeScript & NestJS
ryounasso
0
1.1k
Fast API を用いた Web API の開発
ryounasso
1
610
テストゼロの個人開発プロジェクトにテストを導入した話
ryounasso
0
470
TypeScript_コンパイラの内側に片足を入れる
ryounasso
3
910
Other Decks in Programming
See All in Programming
The Monolith Strikes Back: Why AI Agents ❤️ Rails Monoliths
serradura
0
310
ファインチューニングせずメインコンペを解く方法
pokutuna
0
300
「効かない!」依存性注入(DI)を活用したAPI Platformのエラーハンドリング奮闘記
mkmk884
0
320
Vibe NLP for Applied NLP
inesmontani
PRO
0
370
Claude Codeをカスタムして自分だけのClaude Codeを作ろう
terisuke
0
120
Coding at the Speed of Thought: The New Era of Symfony Docker
dunglas
0
4.8k
UIの境界線をデザインする | React Tokyo #15 メイントーク
sasagar
1
280
実践CRDT
tamadeveloper
0
470
事業会社でのセキュリティ長期インターンについて
masachikaura
0
250
PHP で mp3 プレイヤーを実装しよう
m3m0r7
PRO
0
260
それはエンジニアリングの糧である:AI開発のためにAIのOSSを開発する現場より / It serves as fuel for engineering: insights from the field of developing open-source AI for AI development.
nrslib
1
840
GNU Makeの使い方 / How to use GNU Make
kaityo256
PRO
16
5.6k
Featured
See All Featured
Code Reviewing Like a Champion
maltzj
528
40k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
240
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
260
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
62
53k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
180
Un-Boring Meetings
codingconduct
0
260
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.8k
The Language of Interfaces
destraynor
162
26k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
680
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
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