[英]Spring Bean - Constructor with arguments
我在构造函数中看到一个错误,内容为
不能自动连接“字符串queueName”。
我在另一个类中定义了AmazonSQSAsync
组件,但没有queueName
。 为什么构造函数试图自动装配参数,我该如何解决呢?
@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知道将注入它的值。
因此,您有2个选择:
final
修饰符。 使用@Value
从配置文件注入您的值。 创建一个String类型的bean并将其注入。 您应该命名:
@Bean("queueName") public String getQueueName {return "xyz";}
并注入像:
@Autowire
@Qualifier("queueName")
private final String queueName;
在正常情况下,选项1是首选。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.