SpringBoot資料響應、分層解耦、三層架構

2023-11-01 12:00:19

響應資料

@ResponseBody

  • 型別:方法註解、類註解
  • 位置:Controller方法、類上
  • 作用:將方法返回值直接響應,如果返回值型別是 實體物件/集合 ,將會轉換為json格式響應
  • 說明:@RestController = @Controller + @ResponseBody

統一響應結果

步驟 :

  • 獲取員工資料,返回統一響應結果,在頁面渲染展示

  • 在pom.xml檔案中引入dom4j的依賴,用於解析xml檔案

  • 編寫解析xml的工具類、對應的實體類、xml檔案xxx.xml

  • 頁面靜態檔案,放在resourcse下的static目錄下

  • 編寫Controller程式,處理請求,響應資料

注意

springboot專案的靜態資源(html,css,js等前端資源)預設存放目錄為:classpath:/static 、 classpath:/public 、classpath:/recourcse

分層解耦

三層架構 ----單一職責原則

  • controller:控制層,接收前端傳送的請求,對請求進行處理,並響應資料
  • service:業務邏輯層,處理具體的業務邏輯
  • dao:資料存取層(Data Access Object)(持久層),負責資料存取操作,包括資料的增、刪、改、查

例如:

分層解耦---高內聚低耦合

  • 內聚:軟體中各個功能模組內部的功能聯絡

  • 耦合:衡量軟體中各個層/模組之間的依賴、關聯程度

  • 控制反轉:Inversion Of Control,簡稱IOC。物件的建立控制權由程式自身轉移到外部(容器),這種思想成為控制反轉。

  • 依賴注入:Dependency Injection,簡稱DI。容器為應用程式提供執行時所依賴的資源,稱之為依賴注入。

  • Bean物件:IOC容器中建立、管理的物件,稱之為bean。

IOC&DI入門 ----步驟

  1. Service層及Dao層的實現類,交給IOC容器管理(控制反轉)
    Dao層:

Service層:

  1. 為Controller及Service注入執行時,依賴的物件(依賴注入)
    Controller層:

    Service層:

  2. 執行測試

@Component ----將當前類交給IOC容器管理,成為IOC容器中的bean

  • 將service層和dao層交給容器管理

@Autowired ---- 執行時,IOC容器會提供該型別的Bean物件,並賦值給該變數 - 依賴注入

  • controller層依賴service層
  • service層依賴dao層

IOC詳解

Bean的宣告

註解 說明 位置
@Component 宣告bean的基礎註解 不屬於一下三類時,用此註解
@Controller @Component的衍生註解 標註在控制器類上
@Service @Component的衍生註解 標註在業務類上
@Respository @Component的衍生註解 標註在資料存取類上(由於與mybatis整合,用的少)

@Controller:在實際開發中,標註了@RestController,可以不寫,由於@RestController = @Controller + @ResponseBody

注意

  • 宣告bean的時候,可以通過value屬性指定bean的名字,如果沒有指定,預設為類名首字母小寫
  • 使用以上四個註解都可以宣告bean,但是在springboot整合web開發中,宣告控制器bean只能用@Controller

bean的元件掃描

  • 前面宣告bean的四大註解,想要生效,還需要被元件掃描註解@ComponentScan掃描
  • @ComponentScan註解雖然沒有顯示設定,但是實際上已經包含在了啟動類宣告註解@SpringBootApplication中,預設掃描範圍是啟動類所在包及其子包

小結

  • 宣告bean的註解:@Component、@Controller、@Service、 @Respository
  • @SpringBootApplication具有包掃描作用,預設掃描當前包及其子包

DI詳解

Bean注入:

  • @Autowired註解,預設是按照型別進行,如果存在多個相同型別的bean,將會報出如下錯誤

  • 通過以下幾種方案來解決:
    1、@Primary --- 設定bean的優先順序

    2、@Qualifier ---宣告指明哪個bean(型別指定)

    3、@Resource --- 指定bean的名字(名字指定)

依賴注入的註解:

@Resource與@Autowired區別: