gpt4 book ai didi

java - Spring Bean - 带参数的构造函数

转载 作者:行者123 更新时间:2023-12-01 17:50:55 26 4
gpt4 key购买 nike

我在构造函数中看到一个错误,上面写着

"String queueName" cannot be autowired.

我在另一个类中定义了 AmazonSQSAsync 组件,但没有队列名称。为什么构造函数尝试 Autowiring 参数我该如何解决这个问题?

@Configuration
public class SqsQueueHealthIndicator extends AbstractHealthIndicator {

private final AmazonSQSAsync amazonSQSAsync;
private final String queueName;

public SqsQueueHealthIndicator(AmazonSQSAsync amazonSQSAsync, String queueName) {
this.amazonSQSAsync = amazonSQSAsync;
this.queueName = queueName;
}

@Override
protected void doHealthCheck(Health.Builder builder) {
try {
amazonSQSAsync.getQueueUrl(queueName);
builder.up();
} catch (QueueDoesNotExistException e) {
builder.down(e);
}
}

@Bean
SqsQueueHealthIndicator queueHealthIndicator(@Autowired AmazonSQSAsync amazonSQSAsync, @Value("${url}") String queueName) {
return new SqsQueueHealthIndicator(amazonSQSAsync, queueName);
}

@Bean
SqsQueueHealthIndicator deadLetterQueueHealthIndicator(@Autowired AmazonSQSAsync amazonSQSAsync, @Value("${dlqurl}") String deadLetterQueueName) {
return new SqsQueueHealthIndicator(amazonSQSAsync, deadLetterQueueName);
}

}

最佳答案

因为您将其声明为final,所以它的值必须初始化。

您没有提供默认值,因此 Spring 知道它的值将被注入(inject)。

所以你有两个选择:

  1. 删除 final 修饰符。使用 @Value 从配置文件中注入(inject)您的值。
  2. 创建一个String类型的bean并注入(inject)它。您应该将其命名为:

    @Bean("queueName")
    public String getQueueName {return "xyz";}

然后注入(inject):

    @Autowire
@Qualifier("queueName")
private final String queueName;

一般情况下,选择选项1。

关于java - Spring Bean - 带参数的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50284406/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com