spring框架中三層架構相關的註解

sherlock_lin發表於2020-05-31

做了這麼多年的C++,再去學Java,確實發現,語言都是相通的,即使是Java的那麼多生態,理解起來也並不費勁

Spring 框架目前還在學習中,處於 Tourist 階段,目前只求會做,不求原理,等到專案經驗豐富,運用熟練,再回頭來研究原理

1、說明

springmvc 框架中將業務功能分成了經典的三層:持久層、業務層和控制層,框架中分別使用 @Repository、@Service 和 @Controller 註解來表示各層,使用 @Component 註解對不好分層的類進行註解修飾

這四個註解的作用除了閱讀時分層之外,最重要的是,被其修飾的類會被spring框架掃描並注入到bean容器中,使用時,只需要使用裝配的方式獲取物件即可

這四個註解都有一個屬性 value,該屬性的作用在 spring 中,用於根據此值獲取注入物件,springboot 中,可以使用 @Autowired 註解自動裝配,所以此屬性用處不大

2、@Repository

顧名思義,@Repository 表示一些持久層的元件,用於標註資料庫訪問的 DAO 元件

其內部會封裝一些 不涉及具體業務邏輯 的基本的資料庫操作,例如根據某個欄位查詢、新增、刪除,封裝資料庫query索引等

@Repository 註解標記在類上

一般用法如下:

  1. 先定義一個介面,宣告基本的介面方法;
  2. 新增介面實現類,實現這些介面,@Repository 註解修飾實現類;

示例:

public interface ProductRepository{
    public Product findById(Long id);
}
@Repository
public ProductRepositoryImpl implements ProductRepository{
    public Product findById(Long id){
        //實現方法
    }
}

3、@Service

屬於業務邏輯層,其內部方法 包含具體的業務邏輯,一般稱之為 service層 或者 manager層

service層類的內部一般會通過注入的方式得到repository層的物件,進而進行一些複雜的業務邏輯處理

@Service 註解標記在類上

4、@Controller

controller 作為MVC的C層,用於分發前端的請求,其內部一般會使用注入的方式得到 service 層物件,進行一些請求分發處理

@Controller 標記在類上,表示此類是一個controller,其內部的方法用於接受請求,具體的請求方式使用 @RequestMapping 等註解進行對映

4.1、 @RestController

@RestController 註解的效果等同於 @Controller + @ResponseBody

使用 @RestController 後,controller 方法返回 java 物件,就不再需要使用 @ResponseBody 註解轉換

5、@Component

@Component 一般用於元件,一些需要使用 spring 的依賴注入功能,但是又不好分層的類,可以使用此註解

相關文章