1. 程式人生 > >@repository的含義,並且有時候卻不用寫,為什麽?

@repository的含義,並且有時候卻不用寫,為什麽?

fonts book 聲明 警告 導入 還需要 更多 @service pen

//最後發現是這樣的:@repository跟@Service,@Compent,@Controller這4種註解是沒什麽本質區別,都是聲明作用,取不同的名字只是為了更好區分各自的功能.下圖更多的作用是mapper註冊到類似於以前mybatis.xml中的mappers裏.

技術分享圖片

//也是因為接口沒辦法在spring.xml中用bean的方式來配置實現類吧(接口配不了),所以只能用註解或者mybatis.xml中掃描bean的方式來生成實現類吧

一,首先:@repository是用來註解接口,如下圖:這個註解是將接口BookMapper的一個實現類(具體這個實現類的name叫什麽,還需要再分析源碼找找看)交給spring管理(在spring中有開啟對@repository註解的掃描),當哪些地方需要用到這個實現類作為依賴時,就可以註入了.當然我們也可以主動給這個實現類命名,如下圖

技術分享圖片e

技術分享圖片

二,為什麽有時候我們不用@repository來註解接口,我們照樣可以註入到這個接口的實現類呢?如下圖,下圖是在接口沒有用

@repository註解的情況下,依然可以實現註入它的實現類.

技術分享圖片

上面是在idea中報了紅線警告,說找不到這個實現類,但依然是可以運行,沒有問題(只是單純的警告),而在myeclipse中,是連警告都沒有的,運行完全沒問題.這是因為如下圖:

技術分享圖片

是因為我們在mybatis的xml文件配置了上圖這個bean,它會去將dao這個層中的mapper(也就是我們的接口)都生成實現類,然後交給spring管理(因為mybatis.xml文件我們最終還是導入了spring容器中),所以我們這裏不對這些接口用@repository註解,也是一樣可以用它的實現類,(這也是我們寫項目時,有時感覺完全是沒用到@repository註解的原因,因為沒有什麽必要)而idea報紅線警告,可能是idea自己的原因,這個在我們對它對應的接口用@repository註解後,紅線警告會消失,運行也完全沒問題

@repository的含義,並且有時候卻不用寫,為什麽?