簡體   English   中英

Spring Bean-帶參數的構造函數

[英]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個選擇:

  1. 刪除final修飾符。 使用@Value從配置文件注入您的值。
  2. 創建一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM