Próbuję użyć adnotacji @Autowired
dla klasy usług w aplikacji Spring Boot, ale nadal wyrzucam wyjątek No qualifying bean of type
. Jeśli jednak zmienię klasę usługi na komponent bean, to działa poprawnie. To jest mój kod:Adnotacja przy uruchamianiu sprężyny @Autowirowany z usługi kończy się niepowodzeniem
package com.mypkg.domain;
@Service
public class GlobalPropertiesLoader {
@Autowired
private SampleService sampleService;
}
package com.mypkg.service;
@Service
public class SampleService{
}
A to moja klasa SpringBoot:
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();
}
}
Kiedy próbuję uruchomić to pojawia się następujący wyjątek:
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)}
Ale kiedy usunąć Adnotacja @Service
z klasy SampleService i dodaj ją jako komponent bean w mojej klasie AppConfig, jak poniżej, działa dobrze:
@Configuration
public class AppServiceConfig {
public AppServiceConfig() {
}
@Bean(name="sampleService")
public SampleService sampleService(){
return new SampleService();
}
}
Klasy są w różnych pakietach. Nie używam @ComponentScan
. Zamiast tego używam @SpringBootApplication
, która robi to automatycznie. Jednak próbowałem również z ComponentScan, ale to nie pomogło.
Co ja tu robię źle?
Czy możesz pokazać swoją klasę "Application" (ta z metodą "main")? –
Mam zaktualizowane moje pytanie z kodem dla głównej klasy. – drunkenfist
@drunkenfist Dlaczego zamykasz kontekst? Wiesz, że to zniszczy cały rytuał fasoli. – minion