Spring Boot-Annotation @Autowired von Service schlägt fehl

Ich versuche zu verwenden @Autowired annotation für eine Service-Klasse in Spring-Boot-Anwendung, aber es hält werfen No qualifying bean of type Ausnahme. Jedoch, wenn ich den service Klasse, um eine Bohne, dann funktioniert es einwandfrei. Das ist mein code:

package com.mypkg.domain;
@Service
public class GlobalPropertiesLoader {

    @Autowired
    private SampleService sampleService;        
}

package com.mypkg.service;
@Service
public class SampleService{

}

Und das ist mein SpringBoot Klasse:

package com.mypkg;

import java.util.Set;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Import;

@SpringBootApplication
@EnableJpaRepositories
@Import(RepositoryRestMvcConfiguration.class)
@EnableTransactionManagement
public class TrackingService {
    private static final Logger LOGGER = LoggerFactory.getLogger(TrackingService.class);

    static AnnotationConfigApplicationContext context;

    public static void main(String[] args) throws Exception {
        SpringApplication.run(TrackingService.class, args);
        context = new AnnotationConfigApplicationContext();
        context.refresh();
        context.close();

    }

}

Wenn ich versuche zu laufen, bekomme ich die folgende exception:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.mypkg.service.SampleService] 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)}

Aber wenn ich entfernen Sie die @Service Anmerkung aus der SampleService-Klasse, und fügen Sie es als eine Bohne in meiner AppConfig Klasse als unten, es funktioniert:

@Configuration
public class AppServiceConfig {

    public AppServiceConfig() {
    }

    @Bean(name="sampleService")
    public SampleService sampleService(){
        return new SampleService();
    }

}

Sind die Klassen in verschiedene Pakete. Ich bin nicht mit @ComponentScan. Stattdessen bin ich mit @SpringBootApplication die macht das automatisch. Jedoch habe ich versucht, mit ComponentScan als gut, aber das hat nicht geholfen.

Was mache ich hier falsch?

  • Können Sie zeigen Sie Ihre Application - Klasse (die mit dem main - Methode)?
  • Ich aktualisiert meine Frage mit dem code für die main-Klasse.
  • Warum schließen Sie den Kontext? Sie wissen, es wird alles zerstören, die Bohnen Ritus.
  • Ich konnte nicht reproduzieren, dieses Problem auf den ersten, mit ziemlich den gleichen code, den Sie geschrieben. Dann irgendwann merkte ich, wenn ich fügte hinzu, die @Service Anmerkung und drücken Sie die quick-import, habe ich zwei Möglichkeiten. So gab es eine zweite @Service aus einer Abhängigkeit hatte ich in meinem pom, in diesem Fall spring-boot-starter-jersey aber es könnte andere geben. Es klingt wie eine lange gedreht, aber könnten Sie genauer zu überprüfen import für Ihre @Service?
  • Ich habe eingegeben in einem ähnlichen Beispiel und es funktioniert alles perfekt. Wie oben erwähnt können Sie in der voll-qualifizierte package-name der @Service-annotation sind Sie importiert ?
  • Sie sollten akzeptieren, @EdduMelendez die Antwort, wie löst Ihr Problem und erklärt im detail, warum sollten Sie es tun die Art, wie er vorgeschlagen.

InformationsquelleAutor drunkenfist | 2015-04-22
Schreibe einen Kommentar