gpt4 book ai didi

java - 如何正确配置@Component类

转载 作者:行者123 更新时间:2023-11-30 02:40:41 25 4
gpt4 key购买 nike

我有一个 SqsQueueSender 来向 AWS 发送消息。我想测试一下这门课。我的想法是,它应该是一个 @Component ,注入(inject)到需要它的类中。重要的是,我想将 SqsQueueSender 的端点配置为在测试环境与生产环境中不同。

我一直在以各种不同的方式在类中移动@Autowired和@Component,但一定有一些基本的误解。这是我的最新配置:

package com.foo.fulfillmentApi.dao;

import com.amazonaws.services.sqs.AmazonSQSAsyncClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.aws.messaging.core.QueueMessagingTemplate;
import org.springframework.messaging.support.MessageBuilder;

@Component
public class SqsQueueSender {

private static final Logger LOGGER = LoggerFactory.getLogger(SqsQueueSender.class);
private final QueueMessagingTemplate queueMessagingTemplate;

@Autowired
AmazonSQSAsyncClient amazonSQSAsyncClient;

//This value is from /resources/application.properties
private @Value("${sqs.endpoint}") String endpoint;

public SqsQueueSender(AmazonSQSAsyncClient amazonSqsAsyncClient) {
amazonSqsAsyncClient.setEndpoint(endpoint);
this.queueMessagingTemplate = new QueueMessagingTemplate(amazonSqsAsyncClient);
}

public void send(String queueName, String message) {
this.queueMessagingTemplate.convertAndSend(queueName, MessageBuilder.withPayload(message).build());
}
}

启动时的错误消息状态

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.amazonaws.services.sqs.AmazonSQSAsyncClient' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}

要实现 SqsQueueSender,您必须传递 AmazonSQSAsyncClient。我如何确保该组件可以访问该类型的现有 bean?

最佳答案

您需要创建一个配置类。在你的情况下,它会是这样的:

@Configuration
public class AWSConfig {

@Bean(name ="awsClient")
public AmazonSQSAsync amazonSQSClient() {
AmazonSQSAsyncClient awsSQSAsyncClient
= new AmazonSQSAsyncClient();

// set up the client

return awsSQSAsyncClient;
}

如果注入(inject)有问题,请在 qsQueueSender 中添加限定符:

@Autowired
@Qualifier("awsClient")
AmazonSQSAsyncClient amazonSQSAsyncClient;

您也可以使用 xml 配置来执行此操作,但由于您使用的是注释,因此这是更明智的方法。

关于java - 如何正确配置@Component类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41812104/

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