概念

IOC(控制反转):基于OO的设计原则(Don`t call us, we`ll call you 别来找我,我会来找你);程序中各个组件之间的关系,不是由程序代码直接操控的,而是有Spring容器控制;控制权从应用代码移交到Spring容器上。

DI(依赖注入):Spring容器中有很多bean的实例,他会将符合依赖关系的对象通过属性注入或者构造注入的方式进行关联

温馨提示:

  • Spring框架什么时候被加载?
    • 读取配置文件的时候,或者加载注解的时候,Spring上下文就启动了
  • bean什么时候被创建?
    • 跟获取bean的方式(ApplicationContext/BeanFactory)有关,也跟bean的生命周期有关
    • 反射:类名
  • bean之间的关系到底如何被维护?
    • 所有的bean被创建后会进入Spring容器
    • Spring根据依赖关系来进行注入
  • ApplicationContext:重量级对象,要保证单例

获取bean的方式

  1. ApplicationContext
  2. BeanFactory

ApplicationContext是继承了BeanFactory,尽量使用ApplicationContext,因为它提供了更多的功能(国际化、事件机制、多配制文件)

bean诞生的方式的区别:

  • BeanFactory:配置的bean不会没马上被实例化,而是使用的时候才会被实例化
    1. 快速启动,运行相对慢
    2. 内存要求较低
  • ApplicationContext:配置的bean在启动的时候会被实例化
    1. 启动缓慢,运行速度加快
    2. 内存要求较大

读取配置文件的方式


bean的作用域

在不进行任何作用域配置的时候,不管是ApplicationContext还是BeanFactory,我们的bean都是singleton(单例),在Spring上下文空间只有一个实例

  • prototype:每次使用的时候都会创建一个新的实例,ApplicationContext也不会再读取配置文件的时候创建该实例,也是与BeanFactory一样,都是用的时候才创建。
  • web开发中bean的作用域
    • SSM:绑定request对象到服务请求的Thread上,使得后面的bean在之后的调用链上在请求和会话的范围上可见
    • controller是请求级别的作用域(每个请求对应一个controller实例
    • 一个请求对应的是一个完整的业务,代表是一个事务

bean的生命周期


bean实例化过程

  1. 读取配置文件加载Spring上下文的时候,bean被创建
  2. 属性的注入
  3. 设置当前实例的名字
  4. 设置当前实例所在的BeanFactory工厂
  5. 设置当前实例所在的ApplicationContext上下文空间
  6. 后置处理器的before初始化被调用(后置处理器:在实例被初始化之前和之后都做一些事情,类似于filter,拦截住,添加功能再继续往后
  7. 用户自定义初始化
  8. 在后置处理器的before和after之间做初始化
  9. 后置处理器的after初始化方法被调用
  10. 使用
    销毁
  11. DisposableBean的销毁方法调用
  12. 用户自定有销毁方法调用

ps:因作者能力有限,有错误的地方请见谅

  • 喜欢这篇文章的话可以用快捷键 Ctrl + D 来收藏本页
× 请我吃糖~
打赏二维码