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

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

//最後發現是這樣的:@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註解後,紅線警告會消失,執行也完全沒問題