java - Call service method from non controller class -


मैं होम कंट्रोलर में निम्न कर रहा हूं

  @ नियंत्रक सार्वजनिक वर्ग होम कंट्रोलर {@Autowired निजी यूरोपीय संघ सेवा उपयोगकर्ता; @RequestMapping (मान = "/") सार्वजनिक स्ट्रिंग सेटअपफॉर्म (मानचित्र & lt; स्ट्रिंग, ऑब्जेक्ट & gt; नक्शे) {उपयोगकर्ता उपयोगकर्ता = (उपयोगकर्ता) SecurityContextHolder.getContext ()। GetAuthentication ()। GetPrincipal (); EUser currentUser = userDao.findUserByName (user.getUsername ()); Println (currentUser.getUserName ()); }}   

यह ठीक काम करता है और मुझे आउटपुट को ठीक से दिखाता है अब अगर मैं एक गैर नियंत्रक प्रकार वर्ग में निम्न कार्य करता हूं जैसे

  सार्वजनिक वर्ग उपयोगिता {@Autowired Private EUserService userDao; सार्वजनिक शून्य getLoggedUser () {उपयोगकर्ता उपयोगकर्ता = (उपयोगकर्ता) SecurityContextHolder.getContext () .getAuthentication ()। GetPrincipal (); EUser currentUser = (EUser) userService.findUserByName (उपयोगकर्ता .getUsername ()); Println (currentUser.getUserName ()); }}   

यह मुझे निम्न नलपॉइंटर एक्सेप्शन देता है

  SEVERE: servlet.service () servlet के लिए [वसंत] संदर्भ के साथ पथ [/ Ebajar] फेंक दिया अपवाद [अनुरोध प्रक्रिया विफल रही; नेस्टेड अपवाद java.lang.NullPointerException] मूल कारण के साथ java.lang.NullPointerException   

इसे ठीक कैसे करें ??

समस्या यह नहीं है कि आप इसे नियंत्रक से नहीं बुला रहे हैं समस्या ये है कि आप इसे कक्षा से बुला रहे हैं जो कि वसंत द्वारा प्रबंधित नहीं है, इसलिए उपयोगकर्ता डाओ यहां इंजेक्शन नहीं है।

ऐसा लगता है कि "सही" समाधान स्प्रिंग सेम के लिए आपकी उपयोगिता को चालू करना है, उदा। इसे @ सेवा के रूप में चिह्नित करते हुए और इसे स्प्रिंग के माध्यम से कॉल करते हैं वैकल्पिक रूप से आप इसे ApplicationContext.getBean () (विवरण के लिए देखें) का उपयोग करके प्रोग्राम को पुनः प्राप्त कर सकते हैं

Comments

Popular posts from this blog

sonata admin - how to add ManyToOne property field in configureListfield in sonataAdmin -

wpf - ControlTemplate with changes for every class -

sql - Return Function using Cursor -