I am trying to use the @Autowired annotation for the Service class in a Spring Boot application, but it continues to throw a No qualifying bean of type exception. However, if I change the class of service to bean, then it works fine. This is my code:
package com.mypkg.domain; @Service public class GlobalPropertiesLoader { @Autowired private SampleService sampleService; } package com.mypkg.service; @Service public class SampleService{ }
And this is my SpringBoot class:
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(); } }
When I try to run this, I get the following 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)}
But when I @Service annotation from the SampleService class and add it as a bean to my AppConfig class, as shown below, it works fine:
@Configuration public class AppServiceConfig { public AppServiceConfig() { } @Bean(name="sampleService") public SampleService sampleService(){ return new SampleService(); } }
Classes are in different packages. I do not use @ComponentScan . Instead, I use @SpringBootApplication , which does this automatically. However, I also tried with ComponentScan, but that did not help.
What am I doing wrong here?
spring spring-boot spring-mvc annotations
drunkenfist
source share