java - Patterns about bean management in Spring Boot -
मेरे पास एक टास्क
और टास्कहाँडलर
है।
हेडलर एक्सेस डीबी के माध्यम से DaoService
। DaoService
को स्प्रिंग कंटेनर द्वारा प्रबंधित किया जाता है लेकिन हेन्डलर new
द्वारा उत्पन्न होता है, और स्प्रिंग कंटेनर द्वारा प्रबंधित नहीं होता है।
इसलिए मुझे लगता है कि मैं नहीं कर सकता DaoService
में Autowired
द्वारा हैंडलर एक्सेस करें।
इसलिए मैंने handler को DaoService
पास करने का प्रयास किया। लेकिन मैं डॉन यह कैसे पारित करने के लिए पता नहीं है।
मेरे वर्तमान उपकरण में:
1, मैं एक कार्य करने के लिए DaoService सेट
सार्वजनिक कार्य जनरेटक (परम परम, दाओसेवा दाओ) {कार्य कार्य = नया कार्य (); task.setDao (DAO); task.setparam (getTaskParam (परम)); वापसी कार्य; }
2, में कार्य
's कॉल ()
, मैं DaoService
को हैंडलर पर सेट कर रहा हूं
क्लास टास्क औजार कॉल करने योग्य & lt; बूलियन & gt; {दाओसेवा दाओ; // मिलकर और सेटर सार्वजनिक बूलियन कॉल () {टास्कहैंडलर हैंडलर = टास्कहाँडलरमैप.गेटहैंडलर (); handler.setDaoService (DAO); वापसी हैंडलर। प्रोसेस (परम); }}
3, अंत में, मैं मेरा मुख्य ()
मैं कार्य पाने के लिए generTask () को कॉल करता हूं।
क्लास मेन क्लास () {@Autowired DaoService dao; परम परम = नए परम (); सार्वजनिक स्थिर शून्य मुख्य (स्ट्रिंग [] आर्ग्स) {कार्य कार्य = उत्पन्न टास्क (परम, दाओ); // थ्रेड पूल के लिए कार्य सबमिट करें। }}
मेरी समस्या यह है:
1, कार्य
को DaoService
नामक सदस्य नहीं होना चाहिए, कोड> टास्क का DaoService
, कार्य
से कोई लेना देना नहीं है, केवल TaskHandler
के बारे में चिंतित होना चाहिए।
2, DaoService
को generTasks ()
से पारित नहीं किया जाना चाहिए। एक कार्य
बनाया जा सकता है यहां भी कोई DaoService
नहीं है।
यह कैसे से बचने के लिए? या कुछ अच्छी सलाह?
किसी भी मदद की बहुत सराहना की जाएगी।
नवीनीकृत: <एंड्रॉयड / एंडीविल्किनसन सलाह के अनुसार, कोड शायद यह पसंद है:
<पूर्व> वर्ग टास्कहादलममैप {@Autowired निजी स्थिर XXXHandler xxxHandler; निजी स्थैतिक मानचित्र & lt; स्ट्रिंग, ऐबट इटैमहैंडलर & gt; Map = maps.newHashMap (); स्थैतिक {map.put (स्थिर। XXXX, PH, xxxHandler); } सार्वजनिक स्थैतिक AbstractItemHandler मिल (स्ट्रिंग कुंजी) {वापस map.get (कुंजी); }}
लेकिन मुझे नहीं लगता कि स्थिर क्षेत्र autowired किया जा सकता है।
आपको TaskHandlerMap
पर स्थिर विधियों या फ़ील्ड का उपयोग करने की आवश्यकता नहीं है। इसके बजाय, अगर आप एक स्प्रिंग बीन के रूप में TaskHandlerMap
घोषित करते हैं, तो स्प्रिंग यह सुनिश्चित करेगी कि इसका एक उदाहरण है। आप तब स्प्रिंग कक्षा में किसी भी निर्भरता को इंजेक्ट कर सकते हैं और मानचित्र बनाने के लिए उनका उपयोग कर सकते हैं।
इस तरह से कुछ:
@Component class TaskHandlerMap {निजी अंतिम मानचित्र & lt; स्ट्रिंग, एब्सटैमहैंडलर & gt; हैंडलर मानचित्र = मैप्स। एनईएचशैप (); @ एटोवॉर्ड टास्कहाण्डलरमैप (XXX हांडलर हैंडलर) {हैंडलर मैप.पूट (स्थिर। XXXX, एचडीएल, हेन्डलर); } सार्वजनिक AbstractItemHandler प्राप्त (स्ट्रिंग कुंजी) {वापसी हैंडलर Map.get (कुंजी); }}
Comments
Post a Comment