做了這么多年的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 的依賴注入功能,但是又不好分層的類,可以使用此注解