Spring自定义Logger注入报错:找不到符合条件的Autowire候选Bean
Spring自定义Logger注入错误解决方法
错误信息翻译
构造函数参数0对应的依赖无法满足;嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:找不到符合条件的
java.lang.String类型Bean:期望至少有一个符合自动注入候选条件的Bean。依赖注解:{}
问题原因
你的CustomLogger类同时标记了@Component注解,又通过LoggerConfig中的@Bean方法创建实例,Spring容器会尝试两种方式初始化该类:
- 当Spring通过
@Component扫描初始化CustomLogger时,发现其只有带String参数的构造器,会自动尝试注入String类型的Bean,但容器中不存在对应的String类型Bean,因此抛出错误。
解决方法
方法一:移除CustomLogger上的@Component注解
既然已经通过LoggerConfig手动创建实例并注入env参数,无需让Spring自动扫描该类。修改后代码:
public class CustomLogger { public CustomLogger(String env) {} // ... 省略公共方法 }
同时修正LoggerConfig中@Bean方法的语法错误(缺少括号):
@Configuration public class LoggerConfig { @Value("${my-env}") String env; @Bean public CustomLogger myLogger() { return new CustomLogger(env); } }
方法二:保留@Component,直接在构造器注入配置值
如果希望通过组件扫描初始化CustomLogger,直接在构造器上用@Value注入配置参数,无需额外的LoggerConfig:
@Component public class CustomLogger { public CustomLogger(@Value("${my-env}") String env) {} // ... 省略公共方法 }
这种情况下可以删除LoggerConfig类,Spring会自动扫描并完成参数注入。
内容的提问来源于stack exchange,提问作者user2999870
相关产品推荐
相关产品推荐

