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
120
抽象データ型について学んだ
ryounasso
0
240
開発効率向上のためのリファクタリングの一歩目の選択肢 ~コード分割~ / JJUG CCC 2024 Fall
ryounasso
0
2.9k
Clean Architecture by TypeScript & NestJS
ryounasso
0
890
Fast API を用いた Web API の開発
ryounasso
0
530
テストゼロの個人開発プロジェクトにテストを導入した話
ryounasso
0
410
TypeScript_コンパイラの内側に片足を入れる
ryounasso
3
770
kintone新機能開発のお仕事
ryounasso
2
120
Other Decks in Programming
See All in Programming
대규모 트래픽을 처리하는 프론트 개발자의 전략
maryang
0
120
可変性を制する設計: 構造と振る舞いから考える概念モデリングとその実装
a_suenami
10
1.7k
Vibe coding コードレビュー
kinopeee
0
430
中級グラフィックス入門~効率的なメッシュレット描画~
projectasura
4
2.6k
Terraform やるなら公式スタイルガイドを読もう 〜重要項目 10選〜
hiyanger
12
3.1k
LLMは麻雀を知らなすぎるから俺が教育してやる
po3rin
3
2.1k
物語を動かす行動"量" #エンジニアニメ
konifar
14
4.4k
バイブコーディング超えてバイブデプロイ〜CloudflareMCPで実現する、未来のアプリケーションデリバリー〜
azukiazusa1
3
810
What's new in Adaptive Android development
fornewid
0
140
なぜあなたのオブザーバビリティ導入は頓挫するのか
ryota_hnk
5
590
SwiftでMCPサーバーを作ろう!
giginet
PRO
2
230
大規模FlutterプロジェクトのCI実行時間を約8割削減した話
teamlab
PRO
0
460
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.8k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
Become a Pro
speakerdeck
PRO
29
5.5k
Optimizing for Happiness
mojombo
379
70k
Practical Orchestrator
shlominoach
190
11k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.9k
Optimising Largest Contentful Paint
csswizardry
37
3.4k
Scaling GitHub
holman
461
140k
Writing Fast Ruby
sferik
628
62k
Making the Leap to Tech Lead
cromwellryan
134
9.5k
The Cult of Friendly URLs
andyhume
79
6.5k
Rails Girls Zürich Keynote
gr2m
95
14k
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