0

我正在尝试创建一个 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)}

我不确定我做错了什么或我必须做些什么

4

1 回答 1

1

SpringSecurityLoginControllerclass 指SpringSecurityLoginService的是没有定义 bean 的类。错误就是这么说的。

这是真的,因为您只为 class 定义了一个 bean LoginServiceImpl,它似乎没有以SpringSecurityLoginService任何方式扩展。

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

请参阅Spring 文档

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

由于按类型自动装配可能会导致多个候选者,因此通常需要对选择过程进行更多控制。实现此目的的一种方法是使用 Spring 的 @Qualifier 注释。这允许将限定符值与特定参数相关联,缩小类型匹配集,以便为每个参数选择特定的 bean。

例如,您需要它LoginServiceImpl来实现SpringSecurityLoginService

编辑

因为这只是一个错字,你可能没有在你的 spring 配置文件中包含SpringSecurityLoginService' 包中的包component-scan(正如 gkamal 已经提到的那样)。你应该有类似的东西:

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

whereorg.example应该替换为SpringSecurityLoginService's 包。

于 2012-06-13T11:57:52.317 回答