gpt4 book ai didi

Spring Boot 无法 Autowiring 和运行

转载 作者:行者123 更新时间:2023-12-05 01:36:00 24 4
gpt4 key购买 nike

我无法运行 attached Spring Boot sampler application .它有一个 AMQP 启动器,需要 RabbitMQ。从根本上说,它是一个简单的应用程序,它只是将一条消息发送到绑定(bind)了一个队列的 RabbitMQ Exchange。我收到以下错误:

Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.company.messaging.MessageDeliveryManager com.company.exec.Application.messageDeliveryManager; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.company.messaging.MessageDeliveryManager] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations:
{@org.springframework.beans.factory.annotation.Autowired(required=true)}

应用程序.java

package com.company.exec;

@SpringBootApplication
public class Application implements CommandLineRunner {

@Autowired
MessageDeliveryManager messageDeliveryManager;

public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}

public void run(String... args) throws Exception {
messageDeliveryManager.sendMessage(String message);
}
}

MessageDeliveryManager.java

package com.company.messaging;

public interface MessageDeliveryManager {
void sendMessage(String message);
}

MessageDeliveryImpl.java

package com.company.messaging;

public class MessageDeliveryManagerImpl implements MessageDeliveryManager {

@Value("${app.exchangeName}")
String exchangeName;

@Value("${app.queueName}")
String queueName;

@Autowired
RabbitTemplate rabbitTemplate;

@Bean
Queue queue() {
return new Queue(queueName, false);
}

@Bean
DirectExchange exchange() {
return new DirectExchange(exchangeName);
}

@Bean
Binding binding(Queue queue, DirectExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with(queueName);
}

public void sendMessage(String message) {
rabbitTemplate.send(queueName, message);
}
}

如果有人可以审查我做错的地方并提出建议,我将不胜感激。

最佳答案

因为你有这样一个包树:

com.company.exec
com.company.messaging

并且只使用默认的 @SpringBootApplication,它只是看不到您的 MessageDeliveryManager 及其实现。这是因为 @ComponentScan(@SpringBootApplication 上的元注释)只扫描当前包及其子包。

要使其正常工作,您应该添加以下内容:

@SpringBootApplication
@ComponentScan("com.company")

或者只是将您的 Application 移动到根包 - com.company

关于Spring Boot 无法 Autowiring 和运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28207960/

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