हमने अपने भविष्य के मॉड्यूलरलाइजेशन प्रयासों के लिए जेएसआर-330 एनोटेशन के साथ निर्भरता इंजेक्शन का उपयोग करने का निर्णय लिया है, और गुइस 2 एसवीएन के आधार पर पहले वितरित करने से बहुत खुश हूं।मैं जेएसआर-330 @ प्रदाता और @ इंजेक्ट @ नामांकित ("foo") स्ट्रिंग ** प्रोग्रामेटिक रूप से ** वसंत में कैसे कॉन्फ़िगर कर सकता हूं?
अब हमें यूनिट परीक्षणों के माध्यम से सुनिश्चित करने और दस्तावेज करने की आवश्यकता है कि हमें आवश्यक निर्माण, वसंत में भी काम करते समय प्रोग्रामेटिक रूप से कॉन्फ़िगर किया गया है (हम एक ही रिफैक्टरिंग समर्थन चाहते हैं क्योंकि गुइस के साथ कोई एक्सएमएल फाइल नहीं है)। मैं @Provider
और @Inject @Named("foo") String
समस्याएं आ रही हैं, लेकिन मैं के साथ सादे @Inject
काम बना दिया है:
ApplicationContext ctx = new AnnotationConfigApplicationContext(LIBL_Object.class,
CORE_Provider.class);
this.object = ctx.getBean(LIBL_Object.class);
जहां LIBL_Object आधार वर्ग है इंजेक्ट किया जा करने के लिए में , लेकिन CORE_Provider पंजीकृत नहीं करता के रूप में मैं वसंत के भीतर आशा व्यक्त की।
CORE_Provider के कार्यान्वयन
package qa.jsr330.core;
import javax.inject.Provider;
public class CORE_Provider implements Provider<ProvidedInterface> {
@Override
public ProvidedInterface get() {
return new CORE_Provided();
}
}
है और मैं इसे
package qa.jsr330.core;
import javax.inject.Inject;
public class LIBL_Object {
private ProvidedInterface provided;
public ProvidedInterface getProvided() {
return provided;
}
@Inject
public void setProvided(ProvidedInterface provided) {
this.provided = provided;
}
// Other stuff omitted.
}
में इंजेक्शन इसके अलावा हमने पाया है कि हम कॉन्फ़िगरेशन मान बहुत स्पष्ट रूप से @Named टैग का उपयोग कर पारित कर सकते हैं चाहता हूँ। की तरह इस कोड को दिखता है:
String hostname;
@Inject
public void setHostname(@Named("as400.hostname") String hostname) {
this.hostname = hostname;
}
जहाँ हम तो Guice के साथ इस स्ट्रिंग रजिस्टर कर सकते हैं
bindConstant().annotatedWith(Names.named("as400.hostname")).to(value);
का उपयोग कर तो दो प्रश्न हैं:
- मैं वसंत के साथ
@Provider
वर्ग रजिस्टर कैसे करते हैं 3 प्रोग्रामिक रूप से? - मैं स्प्रिंग 3 के साथ स्ट्रिंग स्थिरांक कैसे पंजीकृत करूं ताकि @ नामित इसे ठीक से चुन सके?
धन्यवाद! "As400.hostname" इंजेक्शन काम करता है - जो बहुत अच्छा है - लेकिन आपके द्वारा सुझाए गए एनोटेशन के साथ मैंने लिखा है CORE_Provider सबक्लास, उठाया नहीं गया है (लेकिन मैं इंटरफ़ेस का एक उदाहरण पंजीकृत कर सकता हूं, जिसे तब इंजेक्शन दिया जाता है)। मुझे स्प्रिंग से अपवाद "प्रकार का कोई मिलान नहीं है ..." अपवाद मिलता है। मुझे क्या पिक्सी धूल याद आ रही है? –
> स्प्रिंग की प्रोग्रामेटिक कॉन्फ़िगरेशन जैसी कोई चीज़ नहीं है ... मुझे यकीन नहीं है कि "प्रोग्रामैटिक" से आपका क्या मतलब है, लेकिन आपका उदाहरण कोड जहां आप जावा से एनोटेशन कॉन्फिग एप्प्लिकेशन कॉन्टेक्स्ट कॉन्फ़िगर करते हैं, मुझे प्रोग्रामेटिक लगता है? –