通过构造函数表达的未满足的依赖关系
Unsatisfied dependency expressed through constructor
我有一个日志记录配置 class,从那里向 application.I 注入一个日志记录过滤器 class 需要将 2 个字符串参数传递给日志记录过滤器 class constructor.But 失败并出现错误
"message" : "Error starting Tomcat context. Exception: org.springframework.beans.factory.UnsatisfiedDependencyException. Message: Error creating bean with name 'LoggingFilter' defined in file \LoggingFilter.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'java.lang.String' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}"
日志配置class
@Configuration
public class LoggingConfiguration {
@Value("${operation.name}")
private String operationName;
@Value("${source.name.ui}")
private String sourceName;
@Bean
public LoggingFilter getLoggingFilter() {
return new LoggingFilter (operationName,sourceName);
}
}
这是我的日志过滤器class
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class LoggingFilter implements Filter {
private String operationName;
private String source;
public LoggingFilter(String operationName,String source) {
this.operationName = operationName;
this.source = source;
}
}
如何将这些变量传递给过滤器 class?
错误消息显示它无法创建 @Component
带注释的 bean,因为上下文中没有类型为 String
的 bean 可以注入。您有两个选择:将两个缺少的构造函数参数作为 beans 提供,或者通过 @Bean
-annotation 将 LoggingFilter
作为 bean 提供。由于您确实在 LoggingConfiguration
中提供了类型为 LoggingFilter
的 bean,因此您可以按如下方式进行:
您尝试创建 bean 两次,一次通过 @Bean
,一次通过 @Component
。
请删除 LoggingFilter
中的 @Component
注释并将 @Order(Ordered.HIGHEST_PRECEDENCE)
移至 @Bean
注释方法。
我有一个日志记录配置 class,从那里向 application.I 注入一个日志记录过滤器 class 需要将 2 个字符串参数传递给日志记录过滤器 class constructor.But 失败并出现错误
"message" : "Error starting Tomcat context. Exception: org.springframework.beans.factory.UnsatisfiedDependencyException. Message: Error creating bean with name 'LoggingFilter' defined in file \LoggingFilter.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'java.lang.String' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}"
日志配置class
@Configuration
public class LoggingConfiguration {
@Value("${operation.name}")
private String operationName;
@Value("${source.name.ui}")
private String sourceName;
@Bean
public LoggingFilter getLoggingFilter() {
return new LoggingFilter (operationName,sourceName);
}
}
这是我的日志过滤器class
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class LoggingFilter implements Filter {
private String operationName;
private String source;
public LoggingFilter(String operationName,String source) {
this.operationName = operationName;
this.source = source;
}
}
如何将这些变量传递给过滤器 class?
错误消息显示它无法创建 @Component
带注释的 bean,因为上下文中没有类型为 String
的 bean 可以注入。您有两个选择:将两个缺少的构造函数参数作为 beans 提供,或者通过 @Bean
-annotation 将 LoggingFilter
作为 bean 提供。由于您确实在 LoggingConfiguration
中提供了类型为 LoggingFilter
的 bean,因此您可以按如下方式进行:
您尝试创建 bean 两次,一次通过 @Bean
,一次通过 @Component
。
请删除 LoggingFilter
中的 @Component
注释并将 @Order(Ordered.HIGHEST_PRECEDENCE)
移至 @Bean
注释方法。