Spring源码概述

前置

反射:程序运行状态时,能动态创建对象,操作对象(方法、属性)

Spring 架构设计思想

在这里插入图片描述

Spring创建对象过程:首先通过 BeanDefinationReader 接口将我们在profiles、annotation或者其他文件中的内容注入到Spring容器的bean信息中,在创建对象之前,先配置Spring的运行环境,然后通过 BeanFactory 创建实例对象。为了提高扩展性,我们希望在 BeanFactory 之前和之后能进行一些操作,因此抽象出来了 BeanFactoryPostProcessor 接口。同样的,在 BeanFactory 创建对象之前和之后也希望能对对象进行一些操作,因此抽象出 BeanPostProcessor 接口。很明显,这里是观察者设计模式的思想。

以上便是Spring的整体设计思想。本质上就是在抽接口,体现了高扩展性,高内聚、低耦合的软件设计理念。

BeanFactory && FactoryBean 的区别

BeanFactory是生产bean的工厂FactoryBean是BeanFactory生产的一个对象

当我们想要自己操作对象的时候,例如通过 getObject() 反射获取对象并进行其他操作的时候,就可以使用FactoryBean

并且由于FactoryBean是BeanFactory生产的对象,那么也可以使用BeanFactory生产的对象的特有方法

IOC / AOP 实现原理以及在Spring中的具体实现

  • IOC / DI:控制反转 / 依赖注入,即原先由new创建对象,或者通过工厂模式创建对象以及管理对象的这些事交给spring完成
    实现原理:反射
  • AOP:面向切面编程,即将与业务无关的重复性代码封装成一个模块
    实现原理:动态代理
  • 具体实现:BeanPostProcessor 进行运行期增强

IOC与AOP的主要目的都是为了降低耦合度,提高扩展性

Spring 生命周期

在这里插入图片描述
在这里插入图片描述
这是在Spring源码中BeanFactory接口中的一段注释,已经写的很明白了

这里简单总结下,方便大家记忆:

  1. 经历一些xxxAware接口,把需要的spring组件通过 setXXX() 注入到bean
  2. 然后经过BeanPostProcessor,执行postProcessBeforeInitialization()
  3. 用户自定义 init-method
  4. 执行postProcessAfterInitialization()
  5. DisposableBean的 destroy()
  6. 用户自定义 destroy-method

可以看到,无非就是在初始化前做点事,初始化后做点事;先Spring做事,后用户做事

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值