01|Spring整体架构

image.png

Core Container

Core Container(核心容器)包含有Core、Beans、Context和Expression模块,其中Core和Beans模块提供IoC(控制反转)依赖注入的特性。

  • Core:Core模块主要包含Spring框架基本的核心工具类
  • Beans:该模块是所有应用都要用到的,它包含访问配置文件、创建和管理Bean以及进行IoC/DI操作相关的所有类
  • Context:构建于Core和Beans的模版基础之上,Context模块继承了Beans的特性,为Spring核心提供了大量拓展,添加了对国际化、事件传播、资源加载和对Context的透明创建的支持。ApplicationContext是Context模块的关键
  • Expression language:提供了强大的表达式语言,用于在运行时查询和操作对象

    Data Access/Integration

    Data Access/Integration层包含JDBC、ORM、OXM、JMS和Transaction模块

  • JDBC:提供了一个JDBC的抽象层

  • ORM:提供了一个交互层,可以混合使用所有Spring提供的特性机械能ORM映射
  • OXM:提供了一个对Object/XML映射实现的抽象层
  • JMS:消息中间件的封装
  • Transaction:支持编程和声明性的事务管理

    Web

    Web层包含了Web、Web-Servlet、Web-Porlet

  • Web:提供了基础的面向Web的集成特性

  • Web-Servlet:包含Spring MVC的实现
  • Web-Porlet:提供了Portlet环境和Web-Servlet模块的MVC实现

    AOP

    提供了一个标准的面向切面编程的实现

    02|核心思想

    2.1|IoC

    控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。
    控制:指的是对象创建的权利
    反转:控制权交由外部环境(IoC容器)

    IOC解决了什么问题:

    image.png

  • OOP开发模式
    UserService和UserDao深度耦合,当UserDao发生变更时,会联动引发UserService的变更,高层模块依赖于底层模块,违法依赖倒置原则。

  • IOP开发模式
    将UserDao抽象为IUserDao接口,UserService依赖于IUserDao抽象接口,不依赖其具体实现,但在创建IUserDao实例对象时(new UserDaoImpl),UserService还是依赖其实例对象。
  • IoC开发模式
    对象之间只依赖于抽象规则,不依赖其具体实现,具体实例的创建权限交由IOC容器进行控制,极大的降低代码的耦合

    IoC和DI的区别

    Ioc:控制反转
    DI:依赖注入
    描述的是同一件事情,只是角度不同,IoC是站在对象的角度,DI则是站在容器的角度

    2.2|AOP

    AOP:Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。
    本质:在不改变原有逻辑的情况下增强横切逻辑。
    AOP可以说是OOP的补充和完善。OOP通过引入封装、继承和多态来建立一种对象的层次结构,用于模拟公共行为的一个集合,但OOP无法很好的解决为分散的对象引入公共行为,AOP为OOP补足了这一块短板。

    AOP的适用场景

  • 日志记录

  • 性能统计
  • 安全控制
  • 事务处理
  • 异常处理