Spring Boot配置类指定Bean名称时报错且启动找不到对应Bean如何解决
问题解决方法
错误根因
你写的@Bean("sessionScopedLdapUser");末尾多了不必要的英文分号,属于Java语法错误:
- 注解是用来修饰下方的
requestScopedBean()方法的,注解行末尾加分号会导致编译器无法将该@Bean注解和下方的方法绑定,还会破坏后续@Scope注解的语法结构,所以IDE会提示Annotations are not allowed here - 因为该语法错误,Spring没有成功注册名为
sessionScopedLdapUser的Bean,所以启动时会抛出找不到对应Bean的错误。
修复方案
直接删除@Bean注解行末尾的分号即可,修正后的配置类代码如下:
@Configuration public class RestTemplateClient { Logger logger = LoggerFactory.getLogger(SwitchController.class); @Bean public RestTemplate restTemplate() { return new RestTemplate(); } // 删掉原来末尾的分号即可 @Bean("sessionScopedLdapUser") @Scope(value = WebApplicationContext.SCOPE_SESSION, proxyMode = ScopedProxyMode.TARGET_CLASS) public LdapUser requestScopedBean() { logger.info("LdapUser bean instance created"); return new LdapUser(); } }
可选校验项
如果修改后仍然报错,可以按顺序检查以下配置:
- 确认
LdapUser类存在public无参构造方法,否则new LdapUser()会编译报错 - 确认
RestTemplateClient配置类在Spring的组件扫描路径下:默认需要放在启动类的同包或者子包目录下,否则需要在启动类上添加@ComponentScan(basePackages = "你的配置类所在包路径") - 检查注解的包导入是否正确,
@Scope、@Bean等注解要导入Spring框架的对应包,不要导错第三方同名注解。
内容的提问来源于stack exchange,提问作者Anuska
相关产品推荐
相关产品推荐

