2017-04-12 49 views
2

我在線閱讀,@Service用於服務層(業務邏輯),@Controller用於API端點,而@Repository用於持久層。爲什麼@ DAO上的服務?

在我的公司,代碼結構爲:

Client -> Rest endpoint -> service -> DAO -> database 

什麼困惑我的是,在DAO層,被註釋爲@Service(實際上兩者的服務和DAO層也標註爲@Service

是否有任何DAO註釋爲@Service的原因?我不能問程序員,因爲他正在休假。

+0

http://stackoverflow.com/questions/35449808/what-will-happen-if-we-interchange-service-and-repository-annotation-in-the-sp – soorapadman

回答

5

使用@Component,@Repository,@Service和@Controller註釋就緒並啓用自動組件掃描後,spring將自動將bean導入到容器中,因此您無需明確定義它們以自動裝入它們。

@Component

的@Component註釋標記的Java類作爲豆所以彈簧的組件的掃描機構可以把它撿起來,並將其拉入應用程序上下文。要使用此批註,應用它在類,如下:

@Repository

雖然上面使用@Component是不夠好,但你可以用更合適的註解,專門爲DAO的即@Repository提供了額外的好處註解。 @Repository註釋是具有類似用法和功能的@Component註釋的特化。除了將DAO導入到DI容器之外,它還會使未經檢查的異常(從DAO方法拋出)有資格轉換爲Spring DataAccessException。

@Service

的@Service註解也是成分註釋的特殊化。它目前不提供任何超過@Component註釋的額外行爲,但是在服務層類中使用@Service over @Component是個好主意,因爲它更好地指定了intent。此外,工具支持和其他行爲將來可能會依賴它。

@Controller

註解@Controller類標記爲一個和Spring Web MVC控制器。它也是一個@Component特殊化,所以用它標記的bean會自動導入到DI容器中。將@Controller註釋添加到類時,可以使用另一個註釋,即@RequestMapping;將URL映射到類的實例方法。

在您的方案中,無論您使用@Service還是@Repository,它對應用程序流程都沒有影響,應用程序將以他們有權自動裝配的方式工作。但標準的做法是使用@Repository進行dao類。