2014-09-12 115 views
0

我使用的在線素材學習Spring框架,並實現如下一個簡單的程序:依賴注入Spring框架 - 工作

我使用「編碼接口」的方法,這是接口:

package com.vipin.math; 

public interface MathOperations { 

    public int add(int a, int b); 
    public int sub(int a, int b); 
} 

一個,我做了實現:

package com.vipin.math; 

    public class MathOperationsImpl implements MathOperations { 

    public int add(int a, int b) { 

     return a+b; 
    } 

    public int sub(int a, int b) { 

     return a-b; 
    } 
} 

取決於這樣做的主要類是:

package com.vipin.app; 

import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 

import com.vipin.math.MathOperations; 
import com.vipin.math.MathOperationsImpl; 

public class MainApp { 

    public static void main(String[] args) { 

     MathOperations mathOperations; 
     ApplicationContext appContext = null; 
     appContext = new ClassPathXmlApplicationContext("spring.xml"); 
     mathOperations = appContext.getBean("mathOperationsImpl", MathOperationsImpl.class); 
     System.out.println(mathOperations.add(10, 20)); 
    } 

現在,因爲MainApp依賴於MathOperations(具體的實現類),並且我們在ApplicationContext上使用getBean()來執行此操作。

我嘗試使用,而不是在主本身使用getBean()方法,這樣@Resource/@Autowire:

@Resouce("MathOperationsImpl") 
MathOperations mathOperations; 

也是這樣:

@Autowired() 
@Qualifire("MathsRelated") 
MathOperations mathOperations; 

但是,我得到空指針當我調用add()方法時異常。

DI是否應該在這種情況下工作?

任何線索,將不勝感激。

這裏是spring.xml,只有在這裏

<beans 

<bean id="mathOperationsImpl" class="com.vipin.math.MathOperationsImpl"> 
<qualifier value="MathsRelated"> 
</bean> 

<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/> 
+0

(是@ @ Qualifire是你的問題中的一個錯字嗎?) – 2014-09-12 19:11:36

+0

哦,是的,這是錯字,我使用的是Eclipse IDE,它捕獲了所有這些。 – CuriousMind 2014-09-12 19:12:42

+0

向我們展示您的spring.xml內容。 – Jaikrat 2014-09-12 19:15:52

回答

0

顯示相關部分的自動裝配只會工作,如果Main類也由Spring容器管理。換句話說,它應該是Spring自身可以配置,連接和管理的Component類之一。這個Main類用於加載Spring容器。使用其他類並定義XML中的bean或使用該類中的自動佈線功能,如果您使用Spring的自動發現功能,則該功能應該由@Component進行註釋。

+0

這怎麼可能?甚至連主類都可以由Spring來管理? – CuriousMind 2014-09-12 19:15:35

+0

我已經添加了更多解釋。 – Braj 2014-09-12 19:16:22

+0

看不清它在哪裏? – CuriousMind 2014-09-12 19:26:37