मेरी आवश्यकता है @Autowire एक नियमित जावा वर्ग को बदले बिना। मैंने जो समाधान देखे, वे उस वर्ग को @Component या @Service से एनोटेट करके हैं, लेकिन मैं वास्तविक वर्ग को नहीं बदल सकता। क्या कोई और तरीका है जिससे मैं इसे कर सकता हूं? किसी भी मदद के लिए धन्यवाद।

1
Mert AKEL 7 फरवरी 2019, 13:28

1 उत्तर

सबसे बढ़िया उत्तर

आप इसके साथ एक बीन बना सकते हैं:

तो आप आसानी से पहले दो तरीकों का इस्तेमाल कर सकते हैं। उदाहरण के लिए आप @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 विधि का कोई सीधा संदर्भ नहीं है, इसलिए नकली उत्पन्न करना आसान है।

5
Davide Lorenzo MARINO 7 फरवरी 2019, 13:59