SptingBoot報錯處理:required a bean of type 'XXX' that could not be found、@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})注解作用、@Mapper和@Repository注解的區別


一、關於解決required a bean of type ‘XXX’ that could not be found.的問題

  報錯信息:Parameter 0 of constructor in com.opengauss.exam.user.service.UserService required a bean of type 'com.opengauss.exam.user.dao.UserDao' that could not be found.

  可能問題有三種:

1、沒有給對應的DAO接口注入@Mapper屬性

  通常這個問題是有可能是忘記了或者粗心大意所遇到的,也是比較的簡單,直接添加@Mapper就可以解決了

2、Mapper引入的時候引入錯了包

  有時候就是同樣的引入的Mapper里面,引入的不是我們需要的Mybatis,所以出現找不到的情況,這種情況確實不太好定位,因為這也很難看出來。

注意

  注意這個@Mapper是不能引入成別的的了

3、包掃描不到

(1)是主啟動類的報名和你的Bean文件的包裹問題

  看到網上有這種情況:

  注意,我的Bean文件的包名是“org.Choiridong.Security.DAO”,但是!!!重點來了,如果你的啟動類是這樣子的(我之前啟動類就是這樣)“org.Choiridong.web”

  請注意,這樣子就會有問題,據我了解,之前看到資料是說,主類只會掃面主類文件下面的包,所以,我的Bean文件自然是沒有辦法掃到的,他只能掃到“org.Choiridong.web”之后的部分,所以把主類名字改成“org.Choiridong”改成這樣子之后,就可以了

(2)忽略了 數據層的掃描

@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})

  由於剛啟動項目的時候沒有數據里連接,所以報錯了,就加了上述注解,忽略了數據層的掃描。把上述配置去掉改成 @SpringBootApplication 即可。

二、@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})注解作用

  exclude,排除此類的AutoConfig,即禁止 SpringBoot 自動注入數據源配置。

  DataSourceAutoConfiguration.class 會自動查找 application.yml 或者 properties 文件里的 spring.datasource.* 相關屬性並自動配置單數據源「注意這里提到的單數據源」。

  那么問題來了,排除了自動配置,Spring還怎么識別到數據庫配置呢?

  答:顯然接下來就需要手動配置,what?那我為什么要排除?然后手動指定數據源?

  如果你發現項目中存在這個排除的騷操作,可以在項目中搜一下Java關鍵字@ConfigurationProperties("spring.datasource ,你可能會發現手動配置數據源的類。

  再來回答為何要手動配置數據源,因為要配置多數據源,上邊有提到DataSourceAutoConfiguration.class默認會幫我們自動配置單數據源,所以,如果想在項目中使用多數據源就需要排除它,手動指定多數據源。

三、@Mapper和@Repository注解的區別

  在用idea寫一個實現類時調用了dao層的處理,使用@Autowired注解時被標紅線,找不到bean。

  解決辦法:在dao加@mapper或者@repository注解。

  這兩種注解的區別在於:

1、使用@mapper后,不需要在spring配置中設置掃描地址,通過mapper.xml里面的namespace屬性對應相關的mapper類,spring將動態的生成Bean后注入到ServiceImpl中。

2、@repository則需要在Spring中配置掃描包地址,然后生成dao層的bean,之后被注入到ServiceImpl中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM