2015-02-23 64 views
1

我是新與Spring Framework和我嘗試了以下例子:@Resource in Spring does not work?

首先,我創建了兩個非常簡單的類

public class ObjectA { 

    @Override 
    public String toString() { 
     return "I am ObjectA"; 
    } 
} 

public class ObjectB { 
    @Override 
    public String toString() { 
     return "I am ObjectB"; 
    } 
} 

不,我想用這個類由Spring管理。 所以我做了另一個類,它使用@Resource(javax.annotation.Resource)Annotiation來連接兩個對象。

public class MyApp { 

    @Resource 
    public ObjectA oa; 

    @Resource 
    public ObjectB ob; 

    public void info() { 
     System.out.println("--------------"); 
     System.out.println(oa); 
     System.out.println("--------------"); 
     System.out.println(ob); 
     System.out.println("--------------"); 

    } 

    public static void main(String[] args) { 
     ApplicationContext applicationContext = new ClassPathXmlApplicationContext("mySpringConfig.xml"); 
     System.out.println(applicationContext.getBean(ObjectA.class)); 
     System.out.println(applicationContext.getBean(ObjectB.class)); 
     MyApp myApp = applicationContext.getBean(MyApp.class); 
     myApp.info(); 
    } 

} 

的mySpringConfig.xml包含此:

[..] 
<bean id="objectA" class="com.mySpringCompany.ObjectA" /> 
<bean id="objectb" class="com.mySpringCompany.ObjectB" /> 
<bean id="myApp" class="com.mySpringCompany.MyApp" /> 
[..] 

現在,當我運行MyApp的的主法,我得到以下:

I am ObjectA 
I am ObjectB 
-------------- 
null 
-------------- 
null 
-------------- 

所以,當我直接來使用ApplicationContext。 getBean(ObjectA.class)在main方法中得到ObjectA的一個實例。當我想要進入MyApp對象時,它不起作用。但我認爲Spring應該已經在MyApp類中注入了兩個對象。我做錯了什麼?在此先感謝您的幫助。

+1

你有沒有在你的XML編寫要掃描的包? '' – 2015-02-23 15:17:43

+0

我想在課堂上你應該用'@ Autowired'而不是'@ Resource' – 2015-02-23 15:18:46

回答

1

您在XML中定義了所有3個bean,做得很好。

但是您還需要通過註釋激活配置,否則沒有什麼可以解釋@Resource。春天只有在你指示的情況下才會這樣做。

這個Bean Post Processor處理@Resource

你可以簡單地把它定義爲一個bean:

<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"/> 

或者您可以使用此:

<context:annotation-config> 
+0

謝謝Cristian。這是關鍵;-) – SpringNewbie 2015-02-23 16:16:47