IntelliJ IDEA स्प्रिंग के @Autowired एनोटेशन का उपयोग करते समय त्रुटियों को दिखाता है


102

IntelliJ IDEA तब त्रुटियां दिखा रहा है जब मैं @Autowiredकक्षा में स्प्रिंग के एनोटेशन का उपयोग करता हूं , लेकिन वर्ग बिना किसी समस्या के कार्य कर रहा है।

यह त्रुटि संदेश है:

स्वतःवाहित सदस्यों को मान्य स्प्रिंग बीन (@ घटक / @ सेवा, आदि) में परिभाषित किया जाना चाहिए कम ... (Ctrl + F1) सेम श्रेणी में स्वतः-भरण समस्याओं की जाँच करता है।


5
इसका उपयोग करने का प्रयास करें: @SuppressWarnings ("स्प्रिंगजवाऑटाउटरिंगस्पेशन")
i-bob

मेरी एकीकरण परीक्षा कक्षाओं के लिए एक ही त्रुटि है। मुझे लगता है कि @SupressWarnings एनोटेशन का उपयोग करना एक अच्छा समाधान है।
केविन विटटेक

Intellij 2016.2 मेरे स्प्रिंग बूट / स्प्रिंग डेटा प्रोजेक्ट के साथ ऐसा कर रहा है। इन्टेलिज किस फाइल में यह पता लगाने के लिए देख रहा है कि सेम क्या है?
एडम

2
मुझे @SuppressWarnings ("SpringJavaAutowiredMembersInspection") का उपयोग करना था
user672009

3
IntelliJ IDEA 2017.3.1 (अल्टीमेट एडिशन) उपयोग के लिए@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
lealceldeiro

जवाबों:


31

मुझे IntelliJ IDEA 13.1.4 के साथ भी यही समस्या थी। मैंने इसे स्प्रिंग फेसलेट (फाइल-> प्रोजेक्ट स्ट्रक्चर) को हटाकर और इसे सिर्फ "डिटेक्शन" दिखाने के लिए छोड़ दिया।


36
लेकिन क्या होगा अगर आप वास्तव में एक बीन को एनोटेट करना भूल जाते हैं। आपको कोई चेतावनी नहीं मिलेगी?
क्लीनकॉड

22

यदि आप जानते हैं कि बीन मौजूद है और इसके निरीक्षण की समस्या है, तो बस चर घोषणा से पहले निम्नलिखित जोड़ें:

@SuppressWarnings("SpringJavaAutowiringInspection")
@Inject MyClass myVariable;

कभी-कभी अगर कोई बीन घोषित कर दिया गया है, तो इंटेलीजेंस हल नहीं कर सकता है, उदाहरण के लिए जब बीन को सशर्त रूप से शामिल किया जाता है और रनटाइम पर स्थिति रिज़ॉल्यूशन होता है।


22

मैंने इसे सुप्रेस वार्निंग जोड़कर तय किया:

 @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
 @Autowired
 private ....

19

यहाँ भी वही त्रुटि हुई!

ऐसा लगता है कि यदि वर्ग कार्यान्वयन @ सेवा या @ समुदाय है, तो इंटेलीज सत्यापित नहीं कर सकता है।

इसे केवल एरर से वार्निंग (Alt + Enter दबाकर) में हल करें।


18

अपने सभी प्रोजेक्ट मॉड्यूल से .iml फ़ाइल निकालें और अगली फ़ाइल -> अमान्य कैश / पुनरारंभ करें पर जाएं


9
पहलुओं को हटाने और चेतावनियों को दबाने या इसी तरह के "सुधार" तार्किक या स्मार्ट नहीं लग रहे थे इसलिए मैंने इसे एक शॉट दिया। लेकिन मैंने आखिरी चरण भी ऐसा नहीं किया। इसके बजाय मैंने अपनी .imlफ़ाइल को हटा दिया , फ़ाइल पर मावेन विकल्पों में पुन: आयात करने का विकल्प चुना pom.xml, और फिर ctrl + sसे बनाने के लिए किया .iml। त्रुटियाँ हो गईं।
चीफवूवेन्सिल्स


5

मुझे भी यही समस्या थी। मैंने इसे प्रत्येक संबंधित मॉड्यूल के लिए स्प्रिंग फेस (फाइल-> प्रोजेक्ट स्ट्रक्चर) जोड़कर हल किया, और फिर कॉन्फ़िगरेशन फ़ाइलों को जोड़ा। कुछ प्रोजेक्ट्स (स्प्रिंग एमवीसी) के लिए, कॉन्फ़िगर फाइलें जहां स्वचालित रूप से पता लगाया जाता है। हालांकि, एक जार परियोजना के लिए, मुझे मैन्युअल रूप से कॉन्फ़िगरेशन फ़ाइलों को जोड़ना पड़ा।


4

सुनिश्चित करें कि आपकी स्प्रिंग बीन की परिभाषा सही है। कभी-कभी, एप्लिकेशन ठीक काम करता है, यह सिर्फ IDE में एक त्रुटि प्रदर्शित करता है, यदि आप एक स्प्रिंग फेशियल परिभाषित करते हैं, तो अपनी परियोजना 'iml' फ़ाइल की जाँच करें।


इसके अलावा अपने एप्लिकेशन- properties.xml की जांच करें। जाँच करें कि क्या लाइन संदर्भ: घटक-स्कैन बेस-पैकेज = "com.my.project" आपके द्वारा संदर्भित सेवा के पैकेज को बाहर नहीं करता है।
i-बॉब

मैंने अपने कोड को मेरे प्रोजेक्ट के "bec-job.iml" में डाल दिया, लेकिन समस्या अभी भी मौजूद है। और मुझे फ़ाइल का नाम नहीं मिल रहा है "ApplicationContext-interface.xml" मेरे प्रोजेक्ट में है, क्या आप इसके बारे में विस्तार से बता सकते हैं ?
विलेनहल

आपको अपने कोड के @Autowired भाग के ठीक ऊपर @SuppressWarnings ("SpringJavaAutowiringInspection") डालनी होगी, जो कि उच्च लाल रंग का हो। इस तरह से IntelliJIdea पहचानती है कि कौन सी चेतावनी को दबाने के लिए।
i-bob

आपको फ़ाइल "Application-properties.xml" मिलनी चाहिए, न कि "applicationContext-interface.xml"
i-bob

1
वह @SuppressWarnings ("स्प्रिंगजवाऑटाउटरिंग इंस्पेक्शन") मुझे हैकी लगता है, लेकिन यह काम करता है। धन्यवाद दोस्तों।
मिन्रास

3

फ़ाइल >> प्रोजेक्ट स्ट्रक्चर >> फेससेट पर जाकर समस्या को हल किया और फिर सभी कॉन्फ़िगरेशन फ़ाइलों को स्प्रिंग फेस में जोड़ दिया। इसके बाद इसने उन फाइलों का पता लगाना शुरू कर दिया जिसमें सेम रहते हैं और इस समस्या को हल करने में सक्षम थे। IntelliJ इस चेक को देना काफी मूल्यवान है और IMHO को अक्षम नहीं किया जाना चाहिए।


मैं वसंत को एक संभावित पहलू के रूप में नहीं देखता। इंटेलीज का आपके पास क्या संस्करण है?
jDub9

2

यह दृश्यता समस्या की तरह लगता है - मूल नियंत्रक उस घटक को नहीं देखता है जिसे आप तार करने की कोशिश कर रहे हैं।

जोड़ने की कोशिश करें

@ComponentScan("path to respective Component") 

मूल नियंत्रक के लिए।


2

सुनिश्चित करें कि आपका IntelliJ Idea (IDE) उन सभी आवश्यक स्प्रिंग कॉन्फ़िगरेशन से अवगत है, जिनके विरुद्ध आपके मॉड्यूल का निरीक्षण किया जा रहा है।

आप इसके तहत जाँच कर सकते हैं

फ़ाइल> प्रोजेक्ट संरचना> मॉड्यूल> [दाहिने पैनल में आपका प्रोजेक्ट नाम]> स्प्रिंग

कभी-कभी, हमें आईडीई को स्पष्ट रूप से बताने की आवश्यकता होती है कि वसंत विन्यास एक निर्भरता से आ रहा है (आपके प्रोजेक्ट स्पेस में मौजूद जार)


1
क्या यह सामुदायिक संस्करण पर उपलब्ध है या यह केवल अंतिम पर है?
आर्किमिडीज ट्रेजानो

1

मुझे भी यही समस्या हुई। खदान इसलिए थी क्योंकि ऑटो वाले के रेफरेंस वाले बीन स्प्रिंग कंपोनेंट नहीं थे (यह एक EJB था), लेकिन ऑटोबायरिंग के इस्तेमाल की इजाजत देते हुए स्प्रिंगबैनअटाउटरिंगइंटरसेप्टर इंटरसेप्टर मिला। मुझे लगता है कि Intellij अपने Autowiring निरीक्षण में इस संभावना को नहीं लेते हैं।


1

मुझे यह समस्या भी हुई। डूइंग alt+ enterऔर फिर प्रभावित लाइन पर स्प्रिंग निरीक्षण को फिर से चलाने या अक्षम करने के लिए कहा। यह केवल 13.4 अपडेट के बाद एक मुद्दा बन गया लगता है।


1

मेरे मामले में मुझे web.xml में लिखना याद आ रहा था:

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>

   <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath*:applicationContext.xml</param-value>
   </context-param>

और एप्लिकेशन संदर्भ फ़ाइल में:

<context:component-scan base-package=[your package name] />

इस टैग को जोड़ने के बाद और intellj desapears में स्वत: प्राप्त त्रुटि के पुनर्निर्माण के लिए मावेन को चलाएं और बायीं तरफ बीन आइकन दिखाई दे: यहां छवि विवरण दर्ज करें


1

मेरा मेरे CrudRepository इंटरफ़ेस पर @Repository नहीं जोड़ने के लिए है, मैं जो ट्यूटोरियल देख रहा था, वह इसे STS में शामिल नहीं किया था और इसकी शिकायत नहीं की थी।




0
eg1:
directorSettings - Editor - Inspections - Spring - Spring Core - Code - Autowiring for Bean Class 
operate:checkout 勾去掉
eg2:
1.impl class add @service
like this:
@Service
public class CityServiceImpl implements CityService{
@Autowired
private CityDao cityDao;

like this
2.dao file class add @Repository
@Repository
public interface CityDao {

0

मैंने इस समस्या को इस तरह हल किया है। IntelliJ में आपके सभी पैकेज एक उप पैकेज में होने चाहिए जो मुख्य / जावा का उप पैकेज है। उदाहरण के लिए मैंने अपने सभी पैकेज src / main / java / com.misisol.watchStore / के तहत डाल दिए हैं और वसंत तब मेरी फलियाँ पा सकता है।


0

@Qualifier के साथ बीन इंजेक्ट करने से मेरे लिए समस्या हल हो गई।


0

मुझे भी ऐसी ही समस्या थी। मैंने इसे "प्रक्रिया स्पष्ट रूप से एनोटेट बीन्स" विकल्प को अनचेक करके हल किया (नीचे स्क्रीनशॉट देखें)। यह विकल्प डिफ़ॉल्ट रूप से लिनक्स पर सक्षम है। अब @ सर्विस और @ कॉनफिगरेशन एनोटेशन दिखाई देते हैं। स्क्रीनशॉट


0

थोड़ा देर से लेकिन मुझे आशा है कि यह किसी और की मदद करता है।

सेवा के लिए कार्यान्वयन वर्ग पर @ सेवा को रखना सुनिश्चित करें

@Service
public class ServiceNameImpl implements ServiceName {

    @Override
    public void method(ObjectType paramName) {
        //CODE
    }

}

इस तरह मैंने त्रुटि को ठीक किया।


0

मुझे पता है कि यह एक पुराना सवाल है, लेकिन मुझे कोई जवाब नहीं आया है जो मेरे लिए इस समस्या को हल करता है इसलिए मैं अपना समाधान प्रदान करूंगा।

ध्यान दें: मैंने सोचा था कि समस्या हो सकती है इस , लेकिन मेरे इस मुद्दे को एक ही इंटरफ़ेस दो बार लागू करने से संबंधित नहीं था। उपयोग @Qualitierकरने से मेरी समस्या दूर हो गई, लेकिन यह एक पट्टी थी और एक उचित समाधान नहीं था, इसलिए मैंने इसके साथ समझौता नहीं किया।

पृष्ठभूमि

मुझे एक पुरानी परियोजना को बनाए रखने का काम सौंपा गया है जो वसंत के विभिन्न संस्करणों के माध्यम से चली गई है और केवल अलग-अलग मॉड्यूल के लिए अपडेट की गई है, इसलिए चीजों को कम से कम कहने के लिए रिफैक्टिंग की आवश्यकता है। मैंने शुरू में डुप्लिकेट बीन के मुद्दे को उठाया था और चीजों के साथ छेड़छाड़ ने ओपी के मुद्दे और डुप्लिकेट बीन के मुद्दे के बीच के मुद्दे को बदल दिया था, हालांकि केवल एक बीन था; डुप्लीकेट बीन्स के लिए नेविगेट करना हमेशा एक ही कक्षा में जाता था।

समस्या

मुद्दा एक @Repositoryवर्ग पर मौजूद था @Autowiredजो एक @Serviceवर्ग में था , जिसमें @ComponentScanएनोटेशन भी था । मैंने देखा कि मेरे पास एक वसंत भी था जो बेस पैकेज पर application-config.xmlकर context:component-scanरहा था, जो मुझे लगता है कि वसंत के पुराने संस्करणों में मूल दृष्टिकोण था। मैं एक पुरानी शाखा के हिस्सों और एक नई परियोजना में एक नई शाखा बनाने की प्रक्रिया में था, जिसका उपयोग विभिन्न परियोजनाओं में किया गया था जो कई वर्षों में विकसित हुई थीं और इसीलिए इस तरह का मिक्स-एंड-मैच हुआ था तरीकों की।

सरल समाधान

चूंकि उपयोग करने के अधिक आधुनिक दृष्टिकोण @ComponentScanको पहले से ही लागू किया गया था इसलिए मैंने अभी हटा दिया application-config.xmlऔर समस्या हल हो गई।


0

निम्नलिखित ने मेरे लिए काम किया:

  1. सेवा को लागू करने वाले सभी वर्गों को ढूंढें (इंटरफ़ेस) जो त्रुटि दे रहा है।
  2. @Service एनोटेशन के साथ उन वर्गों में से प्रत्येक को चिह्नित करें, उन्हें व्यावसायिक तर्क वर्गों के रूप में इंगित करने के लिए।
  3. परियोजना का पुनर्निर्माण करें।

0

मुझे थोड़ी देर हो सकती है, लेकिन घंटों बिताने और इस मुद्दे पर शोध करने के बाद।

मुझे पता चला कि लेटेस्ट वर्जन IntelliJ 2020 @AutoWired वैकल्पिक है और कंस्ट्रक्टर बेस्ड डिपेडेंसी इंजेक्शन बेहतर है।

मैंने सेवा और नियंत्रक वर्ग से @AutoWired एनोटेशन को हटाकर और कंस्ट्रक्टर आधारित निर्भरता इंजेक्शन का उपयोग करके समस्या का समाधान किया ।

यह लिंक मदद कर सकता है।

हैप्पी कोडिंग!


0

मुझे इंटेलीज के 2019.2.4 संस्करण के साथ निर्माण आधारित निर्भरता इंजेक्शन के साथ केवल एक सेवा के साथ यह समस्या थी। मुझे सेवा का नाम बदलने (शिफ्ट + एफ 6) में बदलाव करने में मदद मिली और फिर परिवर्तन को स्तर से हटा दिया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.