[英]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.