# डिपेंडेंसी इंजेक्शन क्या हल करता है — एडवांस्ड जावा

Source: https://www.geekswithgeeks.com/hi/advanced-java/adv-di-explained

> `new` से मैनुअल ऑब्जेक्ट वायरिंग से बनने वाली कड़ी coupling व अ-टेस्ट योग्य कोड देखें, और कंस्ट्रक्टर से dependency इंजेक्ट करना दोनों को कैसे ठीक करता है।

## अपने औज़ार खुद मत बनाओ

एक बढ़ई अपना हथौड़ा खुद नहीं बनाता — उसे थमाया जाता है। किसी क्लास को भी अपने सहयोगी `new` से खुद नहीं बनाने चाहिए; उसे जो चाहिए वह थमाया (**इंजेक्ट**) जाना चाहिए, वह बस यह बताए कि उसे क्या चाहिए, कैसे बनाना है वह नहीं।

## Coupling व टेस्टेबिलिटी

`class OrderService { private EmailSender s = new SmtpSender(); }` `SmtpSender` को हार्डकोड करता है — टेस्ट में नक़ली संस्करण डाल ही नहीं सकते, न ही प्रोडक्शन में provider बदल सकते हैं बिना क्लास छुए। कंस्ट्रक्टर से `EmailSender` इंजेक्ट करने पर टेस्ट स्टब दे सकता है और प्रोडक्शन असली।
