2014-01-15 72 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