2014-01-15 68 views
3

問題:春天注入的資源總是空

我試圖注入服務爲一體的豆,但服務實例總是空。

背景:

我有兩個豆從另一個調用。這是他們如何在XML配置定義:

<context:annotation-config /> 
<bean class="com.test.MyBeanImpl" name="myBean"/> 
<bean id="myService" class="com.test.MyServiceImpl" /> 

和豆類都像這樣實現的:

MyServiceImpl.java

class MyServiceImpl implements MyService { 
    public void getString() { 
     return "Hello World"; 
    } 
} 

MyBeanImpl.java

@Component 
class MyBeanImpl implements MyBean, SomeOtherBean1, SomeOtherBean2 { 
    @Resource(name="myBean") 
    private MyService myService; 

    public MyBeanImpl() {} 
} 

問題:

是否有一些原因與我的bean實現3個接口阻止服務被注入的事實有關?如果沒有其他因素可以影響它呢?

+0

你能發佈的類聲明的你試圖注入'MyService'和整個配置的類? –

+0

我已更新OP以包含更多信息。基本上我沒有在MyService接口或實現類中註釋。乾杯 – travega

+0

如果你的bean配置文件不包含''我不相信'@Resource'可以工作。看到我發佈的要點。我已經測試過,它的工作原理。如果它不符合您的需求,請讓我知道您的情況有何不同,我會修改。 –

回答

5

與您使用註釋只是標記你的服務類@Service註釋和使用@Autowired註解,讓您的服務類的實例

MyServiceImpl.java

package com.mypackage.service; 
@Service 
class MyServiceImpl implements MyService { 

    public void getString() { 
     return "Hello World"; 
    } 
} 

MyBeanImpl 。java的

@Component 
class MyBeanImpl implements MyBean, SomeOtherBean1, SomeOtherBean2 { 

    @Autowired 
    private MyService myService; 

    public MyBeanImpl() {} 
} 

也確保您在<context:component-scan />元素在調度文件提及您的包名稱作爲

<context:annotation-config /> 
<context:component-scan base-package="com.mypackage" /> 

希望這將解決您的問題

1

確保你注入MyService的bean是一個bean。

/* This must be a bean, either use @Component or place in configuration file */ 
@Component 
public class SomeClass{ 
    @Resource 
    private MyService myService; 
} 

另外,還要確保您的配置中已指定的應用程序中使用採用基於註解的配置:

<context:annotation-config/> 

由於您使用多個接口,可以最好用名字來限定豆:

<bean class="com.test.MyBeanImpl" name="myBean" /> 

然後指定在@Resource註解的名稱元素

@Resource(name="myBean") 
private MyService myService; 

以下是解釋這些概念的Github Gist

+0

嗨凱文,首先感謝你去創造Git Gist的努力。有一點區別在於你定義爲MyApp的bean是實現3個接口的bean,MyServiceImpl bean實現了一個接口「MyService」。當我嘗試上面的建議時,我現在得到一個部署錯誤,說沒有叫做「myBean」的bean,因爲你的「SomeClass」就是我所說的「MyBeanImpl」..我會更新我的OP來使它更清晰 – travega