框架设计

框架6大模块

6大模块.png
框架设计.png

Spring协作模式

  • 降低复杂度
  • 更好的分工协作

spring协作模式.png

AOP

AOP

  • 面向切面编程
  • 管理对象生命周期与对象装配
  • 实现原理是加一个中间层代理(字节码增强)来实现所有对象的托管
  • 接口类型
    • 默认使用JDKProxy
    • 如果也想用CGlib要配置 proxy-target-class=true
  • 字节码增强新工具ByteBuddy提供了更友好的API

AOP.png

IoC

  • DI(DependencyInjection)依赖注入
  • 从对象A直接引用对象B,变成对象A只需要依赖一个接口IB,系统启动和装配阶段把IB接口的实例对象注入到A,A不再直接依赖具体B,从而可以实现在不修改代码的情况下,只需要修改配置文件,即可实现功能迭代
  • 优势

    • 不需要改代码,只需要改配置文件,即不用重新编译打包,只需改完配置文件重启即可
    • 解决循环依赖(属性上的可以处理,构造函数上的循环依赖无法处理)

      解决循环依赖

  • 打破循环依赖

    • 提取到父类处理
    • 结束掉其中的一环
  • 超时

    Bean

    Bean工厂到应用上下文

  • Bean加载过程.png

    加载过程

  • 加载过程.png

  • 加载过程总结.png
  • 加载过程代码.png

    XML配置

    配置原理

  • xml中编写自定义标签,ns,xsd

  • schemaLocation
    • xsd定义在spring.schemas文件,里面对应了classpath下的xsd文件,xsd文件定义检查XML配置是否正确
    • ns定义在spring.handlers文件,里面对应了其handler类,此类可以从DOM节点parse对象
  • 最终形成Bean

配置原理.png

自动化XML配置工具

  • Spring-xbean
    • Spring封装了apache的XmlBeans工具
    • 此工具就是做XML和Beans的转换
  • 2个原理

    • 根据Bean的字段结构,自动生成XSD
    • 根据Bean的字段结构,配置XML文件

      Spring配置方式演化

      配置方式.png

      SpringMessaging技术

      Messaging

  • 由相互依赖的RPC转向只依赖MQ

  • 由同步调用转向异步调用

messaging.png

JMS

  • Java Message Service Java消息服务
  • 生产者/消费者的点对点模式
  • 发布/订阅的一对多模式

JMS.png

SpringBoot

Boot基础

  • 把原来的非限定性框架整合为限定性框架
  • 基于约定大于配置、配置驱动
  • 整合了Spring生态,把各方面成熟的组件整合起来
  • 基于MAVEN和POM的生态,避免版本冲突

    功能特性

  • 创建独立运行的Spring应用

  • 直接嵌入Tomcat或Jetty,无需部署WAR包
  • 提供限定性的starter依赖简化配置
  • 必要时自动配置Spring和第三方依赖库
  • 提供生产production-ready特性:指标度量、健康检查、外部配置等
  • 完全零代码生产、不需要XML配置

    核心原理

    自动化配置

  • 简化配置的核心就是自动化配置

  • 基于Condition、Configuration、EnableXX
  • 通过application.yaml生成Configuration,通过自动配置生成Bean

    SpringBootStarter

  • 脚手架核心

  • 整合各种第三方类库,协同工具
  • 通过约定的前缀,生成一组配置,通过自动配置生成starter组件