2013-02-24 55 views
5

मैं स्प्रिंग फ्रेमवर्क के साथ शुरू करने के लिए कुछ ट्यूटोरियल्स देख रहा हूं और this one पर आया हूं। इसके बाद, मैं नीचे दी गई त्रुटियों में भाग गया। (मैं के बाद से वसंत ढांचे के संस्करण 3 उपयोग करने के लिए अद्यतन किया है और मैं अभी भी एक ही त्रुटियों हो रही है।स्प्रिंग 3 @ ऑटोवायर एनोटेशन मुद्दे

संक्षेप में, मैं एक NullPointerException जहां मैं एक AutoWired वर्ग पर एक विधि कॉल हो रही है।

मेरी कक्षा SayHello है:।

public class SayHello { 

private String name; 

public void setName(String name) { 
    this.name = name; 
} 

public String getName() { 
    return name; 
} 

public void greet() { 
    System.out.println("Hello " + getName()); 
} 

} 

मैं तो /src/test/resources/applicationContext.xml में निम्नलिखित सेट

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:context="http://www.springframework.org/schema/context" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context.xsd"> 

<context:annotation-config/> 


    <bean id="hello" class="package.SayHello"> 
    <property name="name" value="John Smith" /> 
    </bean 

और आखिरकार मेरे पास ऐपटेस्ट क्लास है जहां मैं परीक्षण करने के लिए एक SayHello ऑब्जेक्ट को ऑटोवायर करने का प्रयास करता हूं।

public class AppTest { 

@Autowired 
private SayHello hello; 

@Test 
public void testApp() 
{ 
    hello.greet(); 
    Assert.assertTrue(true); 
} 
} 

जब मैं AppTest चलाने का प्रयास रहा हो तो निम्न त्रुटि:

java.lang.NullPointerException 
at package.AppTest.testApp(AppTest.java:19) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:601) 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) 
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:309) 
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 

मैं विभिन्न लेख और stackoverflow पर सवाल पर लेकिन कुछ की कोशिश कर रहा है और कहीं भी नहीं मिल रहा है के बाद एक नज़र लिया है, सोचा मैं एक नई पोस्ट तैयार करूंगा।

चीयर्स।

यह मदद करता है, यहाँ निर्भरता है कि मैं (स्प्रिंग v3.2.1) का उपयोग कर रहा है:

<dependencies> 

<!-- JUnit --> 
<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>4.11</version> 
    <scope>test</scope> 
</dependency> 


<!-- Spring --> 
<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-beans</artifactId> 
    <version>${org.springframework.version}</version> 
</dependency> 

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-core</artifactId> 
    <version>${org.springframework.version}</version> 
</dependency> 

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-webmvc</artifactId> 
    <version>${org.springframework.version}</version> 
</dependency> 

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-context-support</artifactId> 
    <version>${org.springframework.version}</version> 
</dependency> 

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-aop</artifactId> 
    <version>${org.springframework.version}</version> 
</dependency> 

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-jms</artifactId> 
    <version>${org.springframework.version}</version> 
</dependency> 

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-context</artifactId> 
    <version>${org.springframework.version}</version> 
</dependency> 

अद्यतन

मैं भी @Autowired का उपयोग कर की कोशिश की है मुख्य आवेदन में एनोटेशन निम्नानुसार है। और अभी भी एक NullPointerException त्रुटि प्राप्त करें।

public class App 
{ 
    @Autowired 
    private static SayHello hello; 

    public static void main(String[] args) 
    { 
     hello.greet(); 
    } 
} 

उत्तर

6

आप AppTest पर कुछ टिप्पणियां की आवश्यकता होगी:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = "classpath:/applicationContext.xml") 

ये टिप्पणियां वसंत परीक्षण में परिभाषित कर रहे हैं, तो साथ ही साथ यह निर्भरता जोड़ें:

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-test</artifactId> 
    <version>${org.springframework.version}</version> 
    <scope>test</scope> 
</dependency> 
+0

शानदार, यह किया! मेरा परीक्षण अब गुजर रहा है और प्रिंटिंग आउटपुट जैसा कि मैं उम्मीद करता हूं।क्या मुझे मुख्य आवेदन के साथ काम करने के लिए ऑटोवॉयरिंग प्राप्त करने के समान कुछ करना है? धन्यवाद @ zagyi! – cast01

+0

नहीं, यदि आप लिंक किए गए आलेख में परिभाषित अनुसार 'ऐप' क्लास का उपयोग करते हैं, तो यह एनएमएल कॉन्फ़िगरेशन में' 'पंक्ति द्वारा निर्देशित एनोटेशन को संसाधित करेगा। – zagyi

+0

चीयर्स @ ज़ागई, मुझे यकीन नहीं था कि अगर मैं बीनफैक्टरी को तुरंत चालू करने और स्पष्ट रूप से GetBean() का उपयोग किए बिना ऐसा कर सकता हूं, तो आईडी स्वचालित रूप से ऑटोवायर एनोटेशन का उपयोग करना पसंद करता है। – cast01

3

@Autowired एनोटेशन केवल काम करेंगे, अगर AppTest ही वसंत द्वारा किया जाता है। ऐसा लगता है कि आप एक साधारण इकाई परीक्षण में अपने सेटअप का परीक्षण कर रहे हैं। यह काम नहीं करेगा। यदि आप जुनीट परीक्षणों में ऑटोवॉयरिंग चाहते हैं, तो आपको वसंत के परीक्षण समर्थन को देखना होगा। लेकिन यह एक पूरी तरह से अलग विषय है।

+0

धन्यवाद @chkal, मैंने मुख्य एप्लिकेशन में ऑटोवायर करने का भी प्रयास किया है और अभी भी वही त्रुटि मिलती है, बीमार यह दिखाने के लिए प्रश्न अपडेट करें। – cast01

1

ट्यूटोरियल में आप इस कोड को लिंक कर लिया है बीन को तत्काल:

BeanFactory factory = new XmlBeanFactory(
    new ClassPathResource("application-context.xml")); 

SayHello hello = (SayHello) factory.getBean("hello"); 

आपका SayHello बीन शून्य है।

+0

धन्यवाद @ औबिन, मैं कई उदाहरणों में आया हूं कि सिर्फ बीन्स को संभालने के लिए applicationContext.xml पर भरोसा करते हैं। मेरा मानना ​​है कि ट्यूटोरियल स्प्रिंग 2 का उपयोग करते हुए उस विधि का उपयोग करता है। – cast01