javascript
在Spring@Component vs @Repository vs @Service
介紹:
借助Spring的自動掃描功能,它可以自動檢測我們的應用程序中定義的各種bean。 我們通常使用可用的Spring注釋之一來注釋我們的bean-@ Component,@ Repository,@ Service,@ Controller 。
在檢測到bean時,Spring只需將其注冊到ApplicationContext中 。
在本快速教程中,我們將研究@ Component,@ Repository和@Service Spring批注之間的區別。
我們可以使用@Component注釋將bean標記為Spring管理的組件。 換句話說, 它是任何Spring托管組件的通用構造型 。
我們可以使用<context:component-scan>標記啟用自動掃描。 在自動掃描過程中,Spring將掃描并注冊所有標有@Component注釋的bean:
@Component public class Employee {...}@Repository批注是@Component批注的特化:
@Component public @interface Repository { }由于@Repository是@Component的一種 ,因此Spring也會自動掃描并注冊它們。
@Repository是持久層的構造型。 它的工作是捕獲所有與持久性相關的異常,并將其作為Spring DataAccessException重新拋出。
為此,我們應該在應用程序上下文中配置PersistenceExceptionTranslationPostProcessor :
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>該bean后處理器將顧問程序添加到所有標有@Repository的 bean。 顧問的職責是將特定于平臺的異常轉換為Spring統一的未經檢查的異常。
就像@Repository一樣,@Service是@Component的另一個特化:
@Component public @interface Service { }就像@Repository一樣,@Service也是@Component的一種 。 這意味著Spring也將自動檢測此類bean。
@Service批注表示我們的bean擁有一些業務邏輯。 到目前為止,它沒有提供@Component以外的任何特定行為。
盡管如此, 我們仍應使用@Service注釋對服務層bean進行注釋,以使意圖清晰明了。 此外,我們永遠不知道Spring是否會選擇為其添加某些特定功能。
NutShell的差異:
讓我們快速總結一下@ Component,@ Repository和@Service之間的區別:
- @Component是最通用的構造型,并將bean標記為Spring托管的組件
- @Service和@Repository批注都是@Component批注的特化
- @Repository是用于持久層的構造型。 它將所有與持久性相關的異常轉換為Spring的DataAccessException
- @Service用于服務層的bean。 目前,它不提供@Component以外的任何其他功能
- 在適用的情況下,總是最好使用@Repository和@Service批注而不是@Component 。 它更清楚地傳達了豆子的意圖
結論:
在本微型教程中,我們了解了流行的Spring批注之間的區別– @ Component,@ Service和@Repository。
總而言之,我們應該始終傾向于根據其特定的圖層約定使用注釋。
翻譯自: https://www.javacodegeeks.com/2019/05/component-repository-service-spring.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的在Spring@Component vs @Repository vs @Service的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 处理异常功能样式
- 下一篇: 原油宝 公告(原油宝备案)