DI是實現面向切面和麪向抽象的前提

DI愈來愈重要

DI就是依賴注入,如今來講,大部分框架都是以DI爲基礎組件的,每個框架都有本身的DI組件,像dotnet core,java spring等,也都爲本身的框架量身打造了DI工具。java

面向對象的幾個原則

  • 依賴倒置原則(DIP):一種軟件架構設計的原則(抽象概念)。
  • 控制反轉(IoC):一種反轉流、依賴和接口的方式(DIP的具體實現方式)。
  • 依賴注入(DI):IoC的一種實現方式,用來反轉依賴(IoC的具體實現方式)。
  • IoC容器:依賴注入的框架,用來映射依賴,管理對象建立和生存週期(DI框架)。

DI的做用

在不少教程裏,DI與IOC基本是相同的概念,其實DI是IOC的具體實現,而咱們說的autofac,spring ioc,unity castle都是DI框架,也叫作ioc容器!它們的做用就是統一管理對象,這個管理也包括了對象的產生和銷燬,產生就是new出一個對象,銷燬就是對象的生命週期,通常來講根據生命週期的範圍,能夠分爲瞬間(用完就銷燬),單次http請求(請求結束後銷燬)和單例(應用程序重啓時銷燬),咱們根據對象的功能去定義它們,例如一個日誌組件,它能夠被定義爲單例的;而一個倉儲對象,它須要定義成'瞬間銷燬'的。spring

DI在公用組件裏的表現

公用組件,它多是一個公用的架構,爲了完成某個功能而被設計出來的穩定的框架,它內部的工做流程相對固定,而實現的具體細節能夠由開發人員根據項目自定義,要想實現這種設計 ,咱們就想到了面向抽象的設計,即面向接口的編程,組件裏的對象都是抽象定義的,而且不負責生產對象,由於只要生命就是具體的,因此這裏的對象都是須要經過DI產生的!編程

咱們用到的太多框架都是這種設計,你們有時間 能夠 看看它們的源代碼:springboot

  • .net identity4
  • .net abp
  • java springboot
  • java spring security

設計一個受權框架

Lind.Authorization概述

Lind.Authorization是一個受權架構體系,主不但有受權的核心邏輯,並且也是面向接口的體現,受權的核心邏輯是固定的,TokenAuthenticationFilter是一種業務場景的功能組件,它的主邏輯不能修改,但裏面的每塊內容能夠根據項目自身去實現,這類型於模板方法模式,它規定的業務流程,開發人員根據具體業務去實現裏面的細節。架構

Lind.Authorization組成

  • IUserDetails受權實體接口,多是用戶表,帳戶表等
  • IUserDetailsService受權實體業務接口,規定了受權時須要的方法,具體項目須要去實現它
  • IUserDetailsAuthenticationProvider受權提供者接口,實現了基本的受權業務代碼,具體項目能夠覆蓋它的方法
  • TokenAuthenticationFilter基於token的受權過濾器,主要實現了對請求方法的攔截,它是受權的入口
  • TokenUserDetailsAuthenticationProvider爲token過濾器實現的受權管理者,提供一些公開的方法,使用者能夠繼承它,根據本身須要重寫裏面的方法

TokenAuthenticationFilter認證的過程

下面看一下受權組件的依賴關係:框架

TokenAuthentictokenationFilter
>
IUserDetailsAuthenticationProvider
>
IUserDetailsService
>
IUserDetails

開發人員若是但願在本身項目中使用它,最少要實現這種個接口ide

IUserDetailsService:用戶獲取,token生成,token獲取
IUserDetails:用戶實體
相關文章
相關標籤/搜索