Bean创建失败(春天)

时间:2012-06-13 11:44:28

标签: spring spring-mvc

我正在尝试创建一个bean而不是尝试在我的Controller中注入相同但我得到bean创建失败错误。这是我的代码

@Service("springSecurityLoginServiceImpl")
public class SpringSecurityLoginServiceImpl implements SpringSecurityLoginService
{
  //impl
}

这就是我试图将它注入我的控制器的方式

@Controller
@RequestMapping("springSecurity/login.json")
public class SpringSecurityLoginController
{
    @Autowired
    @Qualifier("springSecurityLoginServiceImpl")
    SpringSecurityLoginService springSecurityLoginService;

}

除了这些注释外,Spring-MVC-config xml文件中没有条目,但是当我启动服务器时面临以下异常

org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping#0'
 defined in ServletContext resource [/WEB-INF/config/spring-mvc-config.xml]: 
 Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: 
 Error creating bean with name 'springSecurityLoginController': 
 Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: 
 Could not autowire field: com.core.servicelayer.user.SpringSecurityLoginService com.storefront.controllers.pages.SpringSecurityLoginController.springSecurityLoginService; 
 nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: 
 No matching bean of type [com.core.servicelayer.user.SpringSecurityLoginService] 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),
 @org.springframework.beans.factory.annotation.Qualifier(value=springSecurityLoginServiceImpl)}

我不确定我做错了什么或者我还有什么额外的事情

1 个答案:

答案 0 :(得分:1)

SpringSecurityLoginController类引用SpringSecurityLoginService类,未定义bean。错误说的那么多。

确实如此,因为您只为类LoginServiceImpl定义了一个bean,它似乎不会以任何方式扩展SpringSecurityLoginService

Spring的bean查找算法首先搜索SpringSecurityLoginService类型为或扩展的bean。然后,它使用Qualifier缩小了avaialble选项。在这种情况下,首先没有找到豆...

请参阅Spring doc

  

4.11.3使用限定符微调基于注释的自动装配

     

由于按类型自动装配可能会导致多个候选人,因此通常会   必须对选择过程有更多的控制权。一种方法   使用Spring的@Qualifier注释完成此操作。这允许   用于将限定符值与特定参数相关联,缩小范围   类型集匹配,以便为每个类选择一个特定的bean   参数。

例如,您需要LoginServiceImpl实施SpringSecurityLoginService

修改

由于它只是一个拼写错误,您可能不会在SpringSecurityLoginService标记中包含component-scan的包,在您的spring配置文件中(正如gkamal已经提到的那样)。你应该有类似的东西:

<context:component-scan base-package="org.example"/>

其中org.example应替换为SpringSecurityLoginService的包。