Spring Boot konnte nicht autowire und ausführen

Ich bin nicht in der Lage zu führen Sie die befestigt Spring-Boot-Anwendung sampler. Es verfügt über einen AMQP-starter, erfordern RabbitMQ. Grundsätzlich ist es eine einfache Anwendung, die nur sendet eine Nachricht an einen RabbitMQ-Austausch mit einer queue verknüpft. Ich bekomme die folgende Fehlermeldung:

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)}

Application.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);
  }
}

Ich wäre wirklich dankbar, wenn jemand überprüfen kann, und bieten einen Vorschlag, was ich falsch mache.

  • Was hat das MessageDeliveryManager Klasse hat? Ich denke der Fehler wird verursacht durch einige andere bean scheitern. Können Sie sehen, die anderen Fehlermeldungen im Zusammenhang mit dem RMQ?
  • MessageDeliveryManager ist eine Schnittstelle implementiert, indem MessageDeliveryManagerImpl. Die Impl-Klasse implementiert die Methode definiert, durch den Vertrag und kommentiert von @Service.
  • Bitte fügen Sie die Schnittstelle MessageDeliveryManager und die Implementierung dieser Schnittstelle und die Klasse Application zu Ihrem questaion.
  • Ist das Paket, das die MessageDeliveryManagerImpl ist, gescannt von Spring Boot? Wenn nicht die Bohne ist nicht verfügbar in den Kontext.
  • da befestigte ich die project-source-code, ich habe nicht fügen Sie den code in die Frage. Werde ich noch hinzufügen. Vielen Dank für die Anregung.
  • die Frage wurde beantwortet. Problem war, dass Komponente war das Scannen Scannen nur das aktuelle Paket, wo Application.java befanden, und nicht die Geschwister Pakete. Ich benutzte den Vorschlag verschieben Sie diese Datei weiter oben in der Hierarchie und Scannen fallen alle untergeordneten Pakete. Der andere Vorschlag war es, explizit den Ausgangspunkt in der package-Hierarchie, die als argument an die @ComponentScan annotation, die auch getestet in Ordnung.

InformationsquelleAutor Web User | 2015-01-29
Schreibe einen Kommentar