剑指Spring源码讲解


剑指Spring源码

image-20200614224324952

image-20200613094953585

spring架构图

  • Core Container:是spring构建的基础,所有模块都在该基础之上

    • Beans:所有应用都要用到,包含访问配置文件,创建和管理bean以及进行IOC和DI操作相关的类,其中BeanFactory是spring框架的核心接口。
    • Core:包含spring框架的基本核心工具类,是其他组建的基本核心
    • Context:spring的上下文,又称为ioc容器,通过上下文可以获取容器中的bean,ApplicationContext接口是context的关键,是beans模块BeanFactory的扩展。与beanFactory言辞加载策略不同,ApplicationContext容器实例化后会自动对所有的单实例bean进行实例化,以及相关依赖关系的装配,使之处于相关待用状态,构建与beans和core基础之上。
    • 提供了类似于jndi注册器框架式的对象访问方法。
    • spEL:提供了强大的表达式语言,用于在运行时查询和操纵对象,可用于将一个bean注入另一个bean,还支持bean的方法调用。
  • Core Container上层

    • AOP:是jdk的动态代理及cglib动态代理为基础,设计出来一系列的方法级别的动态代理横切实现,比如前置通知,返回通知,异常通知。
    • Aspects:集成至AspectJ框架,和Instrumentation一样,主要是为AOP提供多种aop实现方法。
    • Instrumentation:aop的一个资源模块,前面aop和aspects是针对方法级别的切面编程。这个是实现对象级别的切面编程。作用是在jvm启动时生成代理类,通过代理类,在运行时修改类的字节,从而改变一个类的功能。
    • Messaging:可以解读为spring的报文。可以和市面主流消息队列,例如kafka进行消息生成和消费的集成
  • Spring基础核心模块

    • spring-core:
      • 包含核心工具类,其他组件都要是通道这个包中的类。
      • 定义并提供资源的访问方式。将其读入内存进行解析。为spring的ioc和di提供最基础的服务
    • spring-beans:将对象包装在bean中进行管理,从而达到对对象管理和额外操作的目的,从而将对象之间依赖关系转而以配置文件和注解进行管理。(BeanFactioy最重要)
      • bean的定义
      • bean的解析
      • bean的创建
    • spring-context:发现每个bean之间的关系,为他们建立这种关系。是bean之间关系的集合
      • 给spring提供运行时的环境,保存对象状态。bean包装的是object,object有数据,给这些object提供生成环境。
      • 扩展了BeanFactory(ApplicationContext是该模块的核心接口)
    • spring-aop:最小化动态代理的实现
      • jdk动态代理(基于接口实现)
      • cglib(基于类实现)
      • 两者共同点就是只能使用运行时的织入,仅支持方法级编织,仅支持方法执行切入点。
  • 注解:31_注解

  • 工厂模式:6_设计模式 工厂模式

  • 反射:30_反射

  • IOC容器的实现:

    • 创建注解:

      • controller
      • services
      • responsity
    • 提取标记对象

      • 指定范围获取范围内的所有对象。

      • 遍历所有的类,获取被注解标记的类并加载进入容器中。

        • 设置包下类集合。

          • 获取项目类加载器。
          • 通过类加载器获取到加载资源。
          • 依据不同资源类型,采用不同的方式获取资源的合集。
        • 获取classLoader

    • 实现容器

    • 依赖注入


文章作者: zhaolin.long
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 zhaolin.long !
 上一篇
java锁的原理 java锁的原理
java锁的原理 synchronized锁的不是代码,锁的是对象(实例的对象)。 线程安全的原因: 存在共享数据(也称临界资源) 存在多条线程共同操纵这些共享数据 解决办法:同一时刻有且只有一个线程在操作共享数据,其他线程必须等到
2020-06-15
下一篇 
Linux 安装 RabbitMQ 3.7.8 安装部署 Linux 安装 RabbitMQ 3.7.8 安装部署
Linux 安装 RabbitMQ 3.7.8 安装部署安装 ncurses 1、安装GCC GCC-C++ Openssl等模块 yum -y install make gcc gcc-c++ kernel-devel m4 ncurse
2020-06-15
  目录