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.2k
簡易 DI コンテナを作って DI コンテナを知る
簡易 DI コンテナを作ることで、DI コンテナの仕組みについて調べてみました。
ryounasso
December 13, 2023
Tweet
Share
More Decks by ryounasso
See All by ryounasso
React inside basics: learn from “build own react"
ryounasso
0
93
抽象データ型について学んだ
ryounasso
0
220
開発効率向上のためのリファクタリングの一歩目の選択肢 ~コード分割~ / JJUG CCC 2024 Fall
ryounasso
0
2.8k
Clean Architecture by TypeScript & NestJS
ryounasso
0
830
Fast API を用いた Web API の開発
ryounasso
0
520
テストゼロの個人開発プロジェクトにテストを導入した話
ryounasso
0
400
TypeScript_コンパイラの内側に片足を入れる
ryounasso
3
760
kintone新機能開発のお仕事
ryounasso
2
120
Other Decks in Programming
See All in Programming
Railsアプリケーションと パフォーマンスチューニング ー 秒間5万リクエストの モバイルオーダーシステムを支える事例 ー Rubyセミナー 大阪
falcon8823
5
1.1k
『自分のデータだけ見せたい!』を叶える──Laravel × Casbin で複雑権限をスッキリ解きほぐす 25 分
akitotsukahara
2
620
「Cursor/Devin全社導入の理想と現実」のその後
saitoryc
0
790
なぜ適用するか、移行して理解するClean Architecture 〜構造を超えて設計を継承する〜 / Why Apply, Migrate and Understand Clean Architecture - Inherit Design Beyond Structure
seike460
PRO
3
750
PHP 8.4の新機能「プロパティフック」から学ぶオブジェクト指向設計とリスコフの置換原則
kentaroutakeda
2
750
「テストは愚直&&網羅的に書くほどよい」という誤解 / Test Smarter, Not Harder
munetoshi
0
120
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
50
33k
テストから始めるAgentic Coding 〜Claude Codeと共に行うTDD〜 / Agentic Coding starts with testing
rkaga
7
1.3k
関数型まつりレポート for JuliaTokai #22
antimon2
0
160
Kotlin エンジニアへ送る:Swift 案件に参加させられる日に備えて~似てるけど色々違う Swift の仕様 / from Kotlin to Swift
lovee
1
260
#kanrk08 / 公開版 PicoRubyとマイコンでの自作トレーニング計測装置を用いたワークアウトの理想と現実
bash0c7
1
700
20250628_非エンジニアがバイブコーディングしてみた
ponponmikankan
0
670
Featured
See All Featured
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Music & Morning Musume
bryan
46
6.6k
RailsConf 2023
tenderlove
30
1.1k
Code Reviewing Like a Champion
maltzj
524
40k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
A designer walks into a library…
pauljervisheath
207
24k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
48
2.9k
Rails Girls Zürich Keynote
gr2m
94
14k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.4k
Building an army of robots
kneath
306
45k
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