一、關於解決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中。
