Spring 3:将在xml应用程序上下文中声明的bean自动装配到@Component bean

时间:2014-05-07 19:54:49

标签: java spring spring-mvc javabeans

我遇到了在我的类中声明为@Component的bean属性自动装配的问题。我尝试了很多不同的东西,但不幸的是,我在春季配置期间为这个特定的bean获得了NoSuchBeanDefinitionException

下面是一些示例代码,用于模拟我当前的内容。

package com.foo.bar;

@Component
public class MyDeployer implements ApplicationContextAware
{
    @Autowired
    private ClusterRegistry clusterRegistry; //The bean I am trying to wire

    ...
}

在我的应用程序上下文中,我有以下内容:

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

    <bean id="clusterRegistry" name="clusterRegistry" class="com.my.implementation.ClusterRegistryFileImpl" />
</beans>

我的ClusterRegistryFileImpl类定义如下:

package com.my.implementation;

public final class ClusterRegistryFileImpl implements ClusterRegistry
{
    ...
}

请注意,ClusterRegistryFileImpl实现了ClusterRegistry接口,并且此接口/实现类没有依赖项。这些文件也没有使用组件扫描(并且没有@Component注释,但如果我在appContext中声明bean,我不会认为他们需要这样做。 / p>

我的集成测试看起来像

@ContextConfiguration(locations= {
    "/com/app/context/path/appContext.xml",
    "/com/app/context/path/aDifferentAppContext.xml"
})
public class MyDeployerTest extends AbstractTestNGSpringContextTests
{
    @Autowired
    private MyDeployer deployer; //class that uses the bean I need

    @Test
    protected void testDeployerStartup()
    {
        deployer.startup();
        ...
    }

}

以下是错误:

Caused by: 
  org.springframework.beans.factory.NoSuchBeanDefinitionException: 
  No qualifying bean of type [com.my.implementation.ClusterRegistry] found for dependency: 
  expected at least 1 bean which qualifies as autowire candidate for this dependency.
Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

非常感谢任何建议或指示。

1 个答案:

答案 0 :(得分:0)

你的班级     ClusterRegistryFileImpl 应该有一个注释(如@Service,如果是服务类,或@Repository或@Component)。

我不确定最终的访问者是否适用。