आप पहली बार SomeClass
के लिए निर्माता टिप्पणी करने की जरूरत:
class SomeClass {
@Inject
SomeClass(@Named("JDBC URL") String jdbcUrl) {
this.jdbcUrl = jdbcUrl;
}
}
मैं कस्टम व्याख्या का उपयोग करना पसंद करते हैं, इस तरह:
class SomeClass {
@Inject
SomeClass(@JdbcUrl String jdbcUrl) {
this.jdbcUrl = jdbcUrl;
}
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.PARAMETER})
@BindingAnnotation
public @interface JdbcUrl {}
}
तो फिर आप अपने मॉड्यूल में एक बाध्यकारी प्रदान करने की आवश्यकता :
public class SomeModule extends AbstractModule {
private final String jdbcUrl; // set in constructor
protected void configure() {
bindConstant().annotatedWith(SomeClass.JdbcUrl.class).to(jdbcUrl);
}
}
फिर एक बार गुइस कुछ क्लास बनाता है, यह पैरामीटर इंजेक्ट करेगा। अक्सर
class SomeOtherClass {
@Inject
SomeOtherClass(SomeClass someClass) {
this.someClass = someClass;
}
, जब आपको लगता है कि आप एक स्ट्रिंग इंजेक्षन करना चाहते हैं, आप एक वस्तु इंजेक्षन करना चाहते हैं: उदाहरण के लिए, यदि SomeOtherClass SomeClass पर निर्भर करता है। उदाहरण के लिए, यदि स्ट्रिंग एक यूआरएल है, तो मैं अक्सर बाध्यकारी एनोटेशन के साथ URI इंजेक्ट करता हूं।
यह सब मानते हैं कि कुछ स्थिर मूल्य है जो आप स्ट्रिंग के लिए मॉड्यूल निर्माण समय पर परिभाषित कर सकते हैं। यदि मॉड्यूल निर्माण समय पर मान उपलब्ध नहीं है, तो आप AssistedInject का उपयोग कर सकते हैं।
उन सभी चालों के साथ DI (निर्भरता इंजेक्शन) पढ़ने कोड को कठिन बनाता है, इसका मूल लक्ष्य खो गया है। अधिकांश मामलों में निर्भरता निर्भर नहीं है, संदर्भ एक ही स्थान पर रखें। यह रखरखाव को बहुत आसान बनाता है। –