मेरी आवश्यकता है @Autowire
एक नियमित जावा वर्ग को बदले बिना। मैंने जो समाधान देखे, वे उस वर्ग को @Component
या @Service
से एनोटेट करके हैं, लेकिन मैं वास्तविक वर्ग को नहीं बदल सकता। क्या कोई और तरीका है जिससे मैं इसे कर सकता हूं? किसी भी मदद के लिए धन्यवाद।
1 उत्तर
आप इसके साथ एक बीन बना सकते हैं:
- एक एक्सएमएल विन्यास फाइल
- a java कॉन्फ़िग फ़ाइल
- बीन क्लास पर एनोटेशन (
@Component
,@Service
,@Controller
,@Repository
...)
तो आप आसानी से पहले दो तरीकों का इस्तेमाल कर सकते हैं। उदाहरण के लिए आप @Configuration
के साथ एनोटेट किए गए वर्ग का उपयोग कर सकते हैं:
@कॉन्फ़िगरेशन एनोटेशन के साथ किसी वर्ग की व्याख्या करना इंगित करता है कि JavaConfig द्वारा वर्ग का उपयोग बीन परिभाषाओं के स्रोत के रूप में किया जाएगा।
यहाँ कोड है
@Configuration
public class MyConfig {
@Bean
public MyBean getMyBean() {
MyBean myBean = ...
return myBean;
}
}
...
@Component
public class AnotherClass {
@Autowired
private MyBean myBean;
...
}
प्रश्नावली की टिप्पणी से संबंधित सूचनाओं के साथ अद्यतन उत्तर:
यदि आप एक कंस्ट्रक्टर का उपयोग नहीं कर सकते हैं, तो आप इसका उपयोग करके कक्षा का एक उदाहरण प्राप्त कर सकते हैं:
@Bean
public MyBean getMyBean() {
MyBean myBean = MyBean.getInstance();
return myBean;
}
या आप इसे @Autowired
एनोटेशन का उपयोग किए बिना सीधे अपनी कक्षा में उपयोग कर सकते हैं क्योंकि वसंत नहीं है जो आपके लिए MyBean
उदाहरण को तत्काल करता है, बल्कि getInstance
विधि। कोड बन जाएगा:
@Component
public class AnotherClass {
// Creates (or get) the instance
private MyBean myBean = MyBean.getInstance();
...
}
नोट: यदि आप टीडीडी के प्रशंसक हैं तो पहला समाधान एक कोड उत्पन्न करता है जो दूसरे की तुलना में परीक्षण करने के लिए बहुत आसान है क्योंकि स्थिर getInstance
विधि का कोई सीधा संदर्भ नहीं है, इसलिए नकली उत्पन्न करना आसान है।
संबंधित सवाल
नए सवाल
java
जावा एक उच्च स्तरीय प्रोग्रामिंग भाषा है। इस टैग का उपयोग तब करें जब आपको भाषा का उपयोग करने या समझने में समस्या हो। इस टैग का उपयोग शायद ही कभी किया जाता है और इसका उपयोग अक्सर [वसंत], [वसंत-बूट], [जकार्ता-ई], [Android], [javafx], [हडूप], [श्रेणी] और [मावेन] के साथ किया जाता है।