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
1.3k
簡易 DI コンテナを作って DI コンテナを知る
簡易 DI コンテナを作ることで、DI コンテナの仕組みについて調べてみました。
ryounasso
December 13, 2023
Tweet
Share
More Decks by ryounasso
See All by ryounasso
明日から始めるリファクタリング
ryounasso
0
170
駆け足で Google から学ぶテスト設計の指針
ryounasso
0
150
React inside basics: learn from “build own react"
ryounasso
0
170
抽象データ型について学んだ
ryounasso
0
350
開発効率向上のためのリファクタリングの一歩目の選択肢 ~コード分割~ / JJUG CCC 2024 Fall
ryounasso
0
3.5k
Clean Architecture by TypeScript & NestJS
ryounasso
0
1k
Fast API を用いた Web API の開発
ryounasso
1
580
テストゼロの個人開発プロジェクトにテストを導入した話
ryounasso
0
440
TypeScript_コンパイラの内側に片足を入れる
ryounasso
3
840
Other Decks in Programming
See All in Programming
公共交通オープンデータ × モバイルUX 複雑な運行情報を 『直感』に変換する技術
tinykitten
PRO
0
180
フロントエンド開発の勘所 -複数事業を経験して見えた判断軸の違い-
heimusu
6
2.4k
CSC307 Lecture 03
javiergs
PRO
1
470
Graviton と Nitro と私
maroon1st
0
160
0→1 フロントエンド開発 Tips🚀 #レバテックMeetup
bengo4com
0
480
[AtCoder Conference 2025] LLMを使った業務AHCの上⼿な解き⽅
terryu16
6
1k
Spinner 軸ズレ現象を調べたらレンダリング深淵に飲まれた #レバテックMeetup
bengo4com
1
210
JETLS.jl ─ A New Language Server for Julia
abap34
2
470
AIエージェント、”どう作るか”で差は出るか? / AI Agents: Does the "How" Make a Difference?
rkaga
3
980
AIで開発はどれくらい加速したのか?AIエージェントによるコード生成を、現場の評価と研究開発の評価の両面からdeep diveしてみる
daisuketakeda
1
670
AI時代を生き抜く 新卒エンジニアの生きる道
coconala_engineer
1
520
実は歴史的なアップデートだと思う AWS Interconnect - multicloud
maroon1st
0
310
Featured
See All Featured
It's Worth the Effort
3n
188
29k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
75
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
Skip the Path - Find Your Career Trail
mkilby
0
42
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.2k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.9k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Getting science done with accelerated Python computing platforms
jacobtomlinson
1
94
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
200
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
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