我正在尝试创建一个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)}
我不确定我做错了什么或者我还有什么额外的事情
答案 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
的包。