在我的项目中,我需要一个自定义的 userDetailsService,所以我在某个包中这样声明它:
@Service
@Ihm(name = "userDetailsService")// ignore Ihm, it's just a custom annotation, which works fine
public class UserDetailsServiceImpl implements UserDetailsService
在我的 application-security.xml 文件中,我添加了组件扫描,
<context:component-scan base-package="path(including the userDetailsService for sure)" />
<context:annotation-config />
这并没有帮助我找到带注释的 bean,我得到了 bean 没有定义的异常。
在我的情况下,唯一可行的方法是: 1.删除服务注释 2.在 application-security.xml 中使用 beans:bean,id,class 创建 bean。这很好用。
更有趣的是,当我同时保留组件扫描和注释时,我得到了一个 ID 重复(多个 bean,要求指定 ID)错误。
More than one UserDetailsService registered. Please use a specific Id reference in <remember-me/> <openid-login/> or <x509 /> elements.
所以这意味着@Service
确实创建了 bean,但你不会在 security.xml 中找到它?