做了這麼多年的C++,再去學Java,確實發現,語言都是相通的,即使是Java的那麼多生態,理解起來也並不費勁
Spring 框架目前還在學習中,處於 Tourist 階段,目前只求會做,不求原理,等到專案經驗豐富,運用熟練,再回頭來研究原理
1、說明
springmvc 框架中將業務功能分成了經典的三層:持久層、業務層和控制層,框架中分別使用 @Repository、@Service 和 @Controller 註解來表示各層,使用 @Component 註解對不好分層的類進行註解修飾
這四個註解的作用除了閱讀時分層之外,最重要的是,被其修飾的類會被spring框架掃描並注入到bean容器中,使用時,只需要使用裝配的方式獲取物件即可
這四個註解都有一個屬性 value,該屬性的作用在 spring 中,用於根據此值獲取注入物件,springboot 中,可以使用 @Autowired 註解自動裝配,所以此屬性用處不大
2、@Repository
顧名思義,@Repository 表示一些持久層的元件,用於標註資料庫訪問的 DAO 元件
其內部會封裝一些 不涉及具體業務邏輯 的基本的資料庫操作,例如根據某個欄位查詢、新增、刪除,封裝資料庫query索引等
@Repository 註解標記在類上
一般用法如下:
- 先定義一個介面,宣告基本的介面方法;
- 新增介面實現類,實現這些介面,@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 的依賴注入功能,但是又不好分層的類,可以使用此註解