[英]Spring: No matching bean found which qualifies as autowire
Application-Context is correctly setup! 应用程序上下文已正确设置!
Heres my class scenario 这是我班的情景
public interface IManager
{
public void doStuff();
}
@Component
public abstract class ManagerAction implements IManager
{
@Async
@Override
public void doStuff()
{
//doing stuff
}
public abstract manageWorker();
}
@Component
public class Working extends ManagerAction
{
@Override
public manageWorker()
{
//some busy code
}
}
@Component
public class NotWorking extends ManagerAction
{
@Override
public manageWorker()
{
//some busy code
}
}
@Service
public class BusinessWorker
{
@Autowire
private IManager manager_;
public void preformTasks()
{
manager_.doStuff();
}
}
Heres my error 这是我的错误
ERROR [main] (ContextLoader.java:307) - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'BusinessWorker': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.B
eanCreationException: Could not autowire field: private com.background.IManager com.background.BusinessWorker.manager_; nested exception is org.springframework.beans.
factory.NoSuchBeanDefinitionException: No matching bean of type [com.background.IManager] 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)}
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.background.IManager com.background.BusinessWorker.manager_;
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.background.IManager] 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)}
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:506)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:284)
... 28 more
Application-Context 应用上下文
<mvc:annotation-driven />
<task:annotation-driven />
<context:annotation-config />
<context:component-scan base-package="com.background" />
The error message says it all: you try to autowire an instance of IManager, but two different Spring components implement this interface, so Spring doesn't know which one to autowire. 错误消息说明了一切:您尝试自动装配IManager实例,但是两个不同的Spring组件实现了此接口,因此Spring不知道要自动装配哪个。 You need to use the @Qualifier annotation to specify which one you want Spring to autowire.
您需要使用@Qualifier批注指定您要Spring自动装配的那个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.