@Repository、@Component、@Service、@Controller之間的區別與聯繫

 
@Repository、@Component、@Service、@Controller這些註解使我們開發過程中比較常用的一些註解,今天我們就一起了解一下他們之間的區別與聯繫。
原文 官網引用: 在Spring2.0之前的版本中,@Repository註解可以標記在任何的類上,用來表明該類是用來執行與數據庫相關的操作(即dao對象),並支持自動處理數據庫操作產生的異常
在Spring2.5版本中,引入了更多的Spring類註解:@Component,@Service,@Controller。@Component是一個通用的Spring容器管理的單例bean組件。而@Repository, @Service, @Controller就是針對不同的使用場景所採取的特定功能化的註解組件。
因此,當你的一個類被@Component所註解,那麼就意味着同樣可以用@Repository, @Service, @Controller來替代它,同時這些註解會具備有更多的功能,而且功能各異。
最後,如果你不知道要在項目的業務層採用@Service還是@Component註解。那麼,@Service是一個更好的選擇。
根據上文所述,@Repository註解組件可以將持久層做一個標記,自動處理數據庫操作產生的異常。 (譯者注:因爲原生的java操作數據庫所產生的異常只定義了幾種,但是產生數據庫異常的原因卻有很多種,這樣對於數據庫操作的報錯排查造成了一定的影響;而Spring拓展了原生的持久層異常,針對不同的產生原因有了更多的異常進行描述。所以,在註解了@Repository的類上如果數據庫操作中拋出了異常,就能對其進行處理,轉而拋出的是翻譯後的spring專屬數據庫異常,方便我們對異常進行排查處理)。
註解的含義: @Component最普通的組件,可以被注入到spring容器進行管理 @Repository作用於持久層 @Service作用於業務邏輯層 @Controlle作用於表現層(spring-mvc的註解)
網上資料: 這幾個註解幾乎可以說是一樣的:因爲被這些註解修飾的類就會被Spring掃描到並注入到Spring的bean容器中。
這裏,有兩個註解是不能被其他註解所互換的:
@Controller 註解的bean會被spring-mvc框架所使用。 @Repository 會被作爲持久層操作(數據庫)的bean來使用 如果想使用自定義的組件註解,那麼只要在你定義的新註解中加上@Component即可:
這樣,所有被@ScheduleJob註解的類就都可以注入到spring容器來進行管理。我們所需要做的,就是寫一些新的代碼來處理這個自定義註解(譯者注:可以用反射的方法),進而執行我們想要執行的工作。
@Component就是跟<bean>一樣,可以託管到Spring容器進行管理。
@Service, @Controller, @Repository = {@Component + 一些特定的功能}。這個就意味着這些註解在部分功能上是一樣的。
當然,下面三個註解被用於爲我們的應用進行分層:
@Controller註解類進行前端請求的處理,轉發,重定向。包括調用Service層的方法 @Service註解類處理業務邏輯 @Repository註解類作爲DAO對象(數據訪問對象,Data Access Objects),這些類可以直接對數據庫進行操作 有這些分層操作的話,代碼之間就實現了松耦合,代碼之間的調用也清晰明朗,便於項目的管理;假想一下,如果只用@Controller註解,那麼所有的請求轉發,業務處理,數據庫操作代碼都糅合在一個地方,那這樣的代碼該有多難拓展和維護。
總結 @Component,@Service, @Controller, @Repository是spring註解,註解後可以被spring框架所掃描並注入到spring容器來進行管理 @Component是通用註解,其他三個註解是這個註解的拓展,並且具有了特定的功能 @Repository註解在持久層中,具有將數據庫操作拋出的原生異常翻譯轉化爲spring的持久層異常的功能。 @Controller是spring-mvc的註解,具有將請求進行轉發,重定向的功能。 @Service是業務邏輯層註解,這個註解只是標註該類處於業務邏輯層。 用這些註解對應用進行分層之後,就能將請求處理,業務邏輯處理,數據庫操作處理分離出來,爲代碼解耦,也方便了以後項目的維護和開發。
 
from:https://www.jianshu.com/p/0826e50976d0
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章