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:用户实体
相关文章
相关标签/搜索