通过构造函数表达的未满足的依赖关系

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 注释方法。