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
抽象データ型について学んだ
ryounasso
0
110
開発効率向上のためのリファクタリングの一歩目の選択肢 ~コード分割~ / JJUG CCC 2024 Fall
ryounasso
0
2.6k
Clean Architecture by TypeScript & NestJS
ryounasso
0
770
Fast API を用いた Web API の開発
ryounasso
0
500
テストゼロの個人開発プロジェクトにテストを導入した話
ryounasso
0
390
TypeScript_コンパイラの内側に片足を入れる
ryounasso
3
740
kintone新機能開発のお仕事
ryounasso
2
110
Other Decks in Programming
See All in Programming
AI時代のリアーキテクチャ戦略 / Re-architecture Strategy in the AI Era
dachi023
0
160
マテリアルって何者?RealityKitで扱うマテリアル入門
nao_randd
0
120
一緒に働きたくなるプログラマの思想 #QiitaConference
mu_zaru
84
21k
エンジニア向けCursor勉強会 @ SmartHR
yukisnow1823
3
13k
コンポーネントライブラリで実現する、アクセシビリティの正しい実装パターン
schktjm
1
130
データと事例で振り返るDevin導入の"リアル" / The Realities of Devin Reflected in Data and Case Studies
rkaga
3
2.9k
Rubyの!メソッドをちゃんと理解する
alstrocrack
2
380
Storybookの情報をMCPサーバー化する
shota_tech
3
1.4k
Ruby で作る RISC-V CPU エミュレーター / RISC-V CPU emulator made with Ruby
hayaokimura
5
1.2k
TypeScript エンジニアが Android 開発の世界に飛び込んだ話
yuisakamoto
2
120
クラシルリワードにおける iOSアプリ開発の取り組み
funzin
1
230
Serving TUIs over SSH with Go
caarlos0
0
800
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
Mobile First: as difficult as doing things right
swwweet
223
9.6k
For a Future-Friendly Web
brad_frost
177
9.7k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.8k
Code Reviewing Like a Champion
maltzj
523
40k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
Why You Should Never Use an ORM
jnunemaker
PRO
56
9.4k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.2k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
5
590
Producing Creativity
orderedlist
PRO
344
40k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
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