Spring Boot @Autowired 無法自動注入的問題

Application 啓動類:java

 

@SpringBootApplication
@EnableConfigurationProperties
@ComponentScan(basePackages = { "com.testing"})
public class Application {
   @Bean
   RestTemplate restTemplate() {
      return new RestTemplate();}
   public static void main(String[] args) {
      SpringApplication.run(Application.class, args);
      System.out.println("成功啓動");
   }

Dao層:spring

 

 

public interface UserRepository extends JpaRepository<User, String>{
    User findByUsername(String username);   //
}
Service 層:注入一個繼承了JPA 的接口,理論上spring boot 會把JPA 注入repository,該接口是必定不須要實現類的.
上述方法實現了按Username查詢User實體,能夠看到咱們這裏沒有任何類SQL語句就完成了個條件查詢方法。
這就是Spring-data-jpa的一大特性:經過解析方法名建立查詢
 
@Service
public class DataInit {

    @Autowired
    UserRepository userRepository;
}

可是會提示錯誤:提示@Autowired 不能正常注入:app

 

可正常編譯,無法運行,gradle bootrun 時提示錯誤:post

caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.testing.data.UserRepository com.testing.service.DataInit.userRepository; nested exception is org.spring
framework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.testing.data.UserRepository] 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), @org.springframework.beans.factory.annotation.Qualifier(value=userRepository)}gradle

 

Execution failed for task ':bootRun'.
> Process 'command 'C:\Program Files (x86)\Java\jdk1.8.0_101\bin\java.exe'' finished with non-zero exit value 1ui

總結:this

出現該類錯誤時,可有一下幾個問題須要去檢查:.net

1. 檢查各種是否加了註解,包括@service,@repository 等等;(注意@Autowired放在service實現上,而不是接口類上面。)rest

2. 包是否正確掃描到,這個很重要!!!(個人問題就是由於這個)繼承

 

注意:http://bbs.csdn.net/topics/391978111?page=1#post-401966615 (#5)

SpringBoot項目的Bean裝配默認規則是根據Application類所在的包位置從上往下掃描!

「Application類」是指SpringBoot項目入口類。這個類的位置很關鍵:
若是Application類所在的包爲:com.boot.app,則只會掃描com.boot.app包及其全部子包,若是service或dao所在包不在com.boot.app及其子包下,則不會被掃描!
即, 把Application類放到dao、service所在包的上級,com.boot.Application

知道這一點很是關鍵,不知道spring文檔裏有沒有給出說明,若是不知道還真是無從解決.

 

 

相關文章
相關標籤/搜索