Spring 官网所有版本下载

官网文档中的链接找起来比较麻烦。我们可以通过下面这个链接:
https://repo.spring.io/release/org/springframework/spring/

IOC,AOP

IOC 容器

当我们需要获取对象的时候,可以创建一个工厂类,让工厂类帮我们创建对象。能不能把这个过程让别人来做?
我们只需要知道容器里有对象,我们只要拿来用就好了。至于谁创建的,什么时候创建的,这都不需要你操心。
这时候你会想,假设有一个管理器,给你分配 bean,并且可以满足你的个性化需求,这样就好了。

于是,我们有了 IOC 容器。
IOC 容器,是使用 Map 存放对象的地方,对象是通过反射创建的。
默认情况下,对象在 IOC 容器中都是单例的。如果需要多例,可以修改属性。

IOC 和 DI 的关系?

IOC 是控制翻转,DI 是依赖注入。
IOC 和 DI 是从不同的角度描述同一件事情,IOC 是从容器的角度考虑的,而 DI 是从应用程序的角度考虑的。
IOC 只是一种思想,而 DI 才是具体的实现方式。

什么是控制翻转?

有了 IOC 之后,依赖的对象直接由 IOC 容器创建后,注入到对象中。
由我们主动创建,变成了被动接受,这就是控制反转。

bean 对象信息读取

但是,容器怎么知道你需要什么对象呢?你需要告诉容器,比如通过配置 xml 文件,比如使用注解。BeanDefiniton 就是用来定义类的信息的,你把信息传输给容器,容器接收到信息之后,才能创建对应的对象。
在程序启动的时候,需要把这些定义信息读取进来。但是,有的人用 xml,有的人用注解,怎么统一呢?
这时候,定义一 个 BeanDefinitonReader,用来读取 Bean 的定义信息,如果以后有了新的方式定义 Bean 信息,只需要实现当前接口,就可以了。BeanDefinitonReader 是一个接口,下面有很多不同的实现类,就是很多不同的读取方式。

创建对象

拿到对象信息之后,需要进行实例化操作。我们知道,创建对象可以通过 new / 工厂 / 反射 的方式实现。

实际上,Spring 是通过反射的方式创建对象的。
BeanFactory 工厂,可以用来生产对象、访问工厂。

// bean 实例化,只是一个空对象,没有任何属性值
Constructor constructor = TestClass.class.getConstructor();
Object o = constructor.newInstance();

BeanFactoryPostProcessor 接口:
子类实现如下

你也可以自己实现一个 BeanFactoryPostProcessor:
拿到 bean 的名称,解析 bean,获取到 bean 的 definition,就可以进行处理了。

实例化

BeanProcessor 里面有 Before / AfterInitialization

AOP 实现机制:动态代理
  • cglib
  • jdk

那content…Getbean拿到的是代理类还是反射后的实例呀?
这就是三级缓存存在的意义。

BeanFactory 和 FactoryBean 的区别

Spring 源码讲解:bean 的创建流程 - 公开课笔记相关推荐

  1. Spring 源码解析 - Bean创建过程 以及 解决循环依赖

    一.Spring Bean创建过程以及循环依赖 上篇文章对 Spring Bean资源的加载注册过程进行了源码梳理和解析,我们可以得到结论,资源文件中的 bean 定义信息,被组装成了 BeanDef ...

  2. Spring源码解析-bean实例化

    Spring源码解析-bean实例化 ​ 本文介绍Spring创建 bean 过程中的第一个步骤:实例化 bean. 1. Bean实例化源码 ​ 虽然实例化Bean有多种方式(包括静态工厂和工厂实例 ...

  3. Spring源码剖析——Bean的配置与启动

    IOC介绍   相信大多数人在学习Spring时 IOC 和 Bean 算得上是最常听到的两个名词,IOC在学习Spring当中出现频率如此之高必然有其原因.如果我们做一个比喻的话,把Bean说成Sp ...

  4. 从Spring源码探究DI属性注入流程

    随着不断地使用Spring,以及后续的Boot.cloud,不断的体会到这个拯救Java的生态体系的强大,也使我对于这个框架有了极大的好奇心,以至于产生了我为什么不能写一个这样的框架的思考. 通过自学 ...

  5. Spring源码中getBean的简单流程

    在学习Sring的时候,免不了经常见如下的代码 VirtuousApplicationContext applicationContext = new VirtuousApplicationConte ...

  6. Spring源码之Bean的注册(使用XML配置的方式)

    本文分析的Spring源码是5.2.2版本,使用Gradle进行管理. 一.Bean的注册,先来看通过XML配置Bean的方式 1.配置applicationContext.xml: <?xml ...

  7. Spring源码讲解之 getBean 方法

    getBean 方法是用来进行获取 bean 实例对象的,是我们进行 spring 程序开发从 bean 工厂获取结果的.那这个方法的执行过程是什么样的,下面我们就去揭开它的面纱. 样例代码 Appl ...

  8. Spring源码深度解析,Spring源码以及Bean的生命周期(五)(附代码示例:)

    五)Bean 的生命周期,创建---初始化---销毁的过程 目录 五)Bean 的生命周期,创建---初始化---销毁的过程 一 ,  指定初始化方法 init-method 方法​ 二 ,指定销毁 ...

  9. 【spring源码】基于factoryMethod创建bean对象

    案例: 1.定义Student类: @Data public class Student {private String name;private Integer age;public Student ...

最新文章

  1. 深度学习、AI构图、智能裁图、显著性检测、美感质量评价
  2. 解题报告:Fake Maxpooling(单调队列求矩阵的和)
  3. Unity应用架构设计(7)——IoC工厂理念先行
  4. Vue iView Admin 动态路由菜单加载 前后端分离(springboot 2.x iview admin vue 前后端分离 模型设计器 动态数据权限...
  5. python对操作系统的目录和文件操作
  6. Apache Camel 3 –新增功能前10名
  7. BZOJ2809-左偏树合并
  8. 工信部:鼓励采用低速直驱和高速直驱式永磁电机
  9. ar开发 ue4_UE4 和 ARKit 入门
  10. 零零碎碎写的脚本(四)自动监控某系统服务状态并警报
  11. 经典机器学习系列(六)【集成学习】
  12. 如何胜任一个小型公司的技术总监?
  13. 珍大户《认知世界的经济学》学习笔记,更新时间 2021年01月30日22:34:35
  14. 84 岁 iOS 女程序员,不得不服!
  15. Failed to introspect Class [com.mchange.v2.c3p0.ComboPooledDataSource] from ClassLoader [ParallelWeb
  16. (一)JAVA基于OPENXML的word文档插入、合并、替换操作系列之基础篇
  17. java classpath 遍历_Java 读取JAR文件信息
  18. 前美团COO干嘉伟:好的管理,打得、骂得,又哄得
  19. tomcat的启动流程及原理
  20. 使用Linux Tc实现入向和出向限速

热门文章

  1. centos php imap,centos 5.5 64 php 添加imap 模块记录
  2. angular 字符串转换成数字_Python | 一文看懂Python列表、元组和字符串操作
  3. DeepSORT多目标跟踪算法
  4. dqn在训练过程中loss越来越大_DQN算法实现注意事项及排错方法
  5. 线段树空间容纳且最上边的数(单点更新)
  6. EXE与SYS通信(缓冲模式)
  7. Shell case esac语句
  8. OpenCV 中的绘制功能
  9. 设计模式:责任链模式(Chain of Responsibility)
  10. RT-Thread智能音箱音频应用实践