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
140
駆け足で Google から学ぶテスト設計の指針
ryounasso
0
120
React inside basics: learn from “build own react"
ryounasso
0
150
抽象データ型について学んだ
ryounasso
0
290
開発効率向上のためのリファクタリングの一歩目の選択肢 ~コード分割~ / JJUG CCC 2024 Fall
ryounasso
0
3.3k
Clean Architecture by TypeScript & NestJS
ryounasso
0
990
Fast API を用いた Web API の開発
ryounasso
0
550
テストゼロの個人開発プロジェクトにテストを導入した話
ryounasso
0
420
TypeScript_コンパイラの内側に片足を入れる
ryounasso
3
800
Other Decks in Programming
See All in Programming
マンガアプリViewerの大画面対応を考える
kk__777
0
440
実践Claude Code:20の失敗から学ぶAIペアプログラミング
takedatakashi
18
9.4k
퇴근 후 1억이 거래되는 서비스 만들기 | 내가 AI를 사용하는 방법
maryang
2
350
ビルドプロセスをデバッグしよう!
yt8492
0
220
Introducing RemoteCompose: break your UI out of the app sandbox.
camaelon
2
430
AI時代に必須!状況言語化スキル / ai-context-verbalization
minodriven
2
300
Kotlin 2.2が切り拓く: コンテキストパラメータで書く関数型DSLと新しい依存管理のかたち
knih
0
240
自動テストのアーキテクチャとその理由ー大規模ゲーム開発の場合ー
segadevtech
0
130
Swift Concurrency 年表クイズ
omochi
3
220
Amazon ECS Managed Instances が リリースされた!キャッチアップしよう!! / Let's catch up Amazon ECS Managed Instances
cocoeyes02
0
120
Introduce Hono CLI
yusukebe
6
3.3k
CSC509 Lecture 10
javiergs
PRO
0
160
Featured
See All Featured
Building Flexible Design Systems
yeseniaperezcruz
329
39k
The Pragmatic Product Professional
lauravandoore
36
7k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
640
We Have a Design System, Now What?
morganepeng
54
7.9k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
650
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
Into the Great Unknown - MozCon
thekraken
40
2.1k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
658
61k
GraphQLとの向き合い方2022年版
quramy
49
14k
Statistics for Hackers
jakevdp
799
220k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
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