簡體   English   中英

使用@ConditionalOnProperty 時構造函數的參數 0

[英]Parameter 0 of constructor when using @ConditionalOnProperty

我正在使用 AWS SES 編寫發送 email 服務。 我加一個

@conditionalOnProperty 

在此服務上以控制它是否有效。

@Configuration
@RequiredArgsConstructor
public class MailConfig {
    private final SystemParam systemParam;
    @Bean
    @ConditionalOnProperty(name = "system-param.aws-active",havingValue = "true")
    public AmazonSimpleEmailService amazonSimpleEmailService() {
        String awsAccessKey = systemParam.getAWS_ACCESS_KEY();
        String awsSecretKey = systemParam.getAWS_SECRET_KEY();
        return AmazonSimpleEmailServiceClientBuilder.standard()
                .withCredentials(new AWSStaticCredentialsProvider(
                        new BasicAWSCredentials(
                               awsAccessKey,awsSecretKey)))
                .withRegion(Regions.AP_SOUTHEAST_2)
                .build();
    }

}

當我不想注入它時,我會將 aws-active 設置為 false。 但是運行應用程序的時候,會報錯:

Description:

Parameter 0 of constructor in com.eta.houzezbackend.service.EmailService required a bean of type 'com.amazonaws.services.simpleemail.AmazonSimpleEmailService' that could not be found.


Action:

Consider defining a bean of type 'com.amazonaws.services.simpleemail.AmazonSimpleEmailService' in your configuration.

我知道這是因為我的其他使用 AmazonSimpleEmailService 的類需要注入它:

public record EmailService(AmazonSimpleEmailService amazonSimpleEmailService, SystemParam systemParam) {
...
}

但是,如果我不想將其注冊為 bean,該如何處理呢?

期待您的建議!

你有兩個選擇:

  • 在@Autowired 注釋中將 required 傳遞給 false
  • 也使您的 EmailService 有條件

但是,使用條件 bean 的最佳方式是通過 inheritance:幾個實現通用接口的具體服務。 然后你使自動裝配成為可選的,或者你設置你的條件以便總是有一個加載的 bean。

簡短示例:

public interface ProducerService {
  ...
}

@ConditionalOnProperty(name="xxx", value="true")
public class Producer1Service implements ProducerService {
  ...
}

@ConditionalOnProperty(name="xxx", value="false")
public class Producer2Service implements ProducerService {
  ...
}

public class ConsumerService {
  @Autowired private ProducerService producerService;
  ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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