剑指Offer(Spring)——IOC容器

容器内部的运行的原理:
在这里插入图片描述
Spring启动的时候读取应用程度提供的bean配置并在Spring容器中生成一份相应的bean配置注册表,然后根据这张注册宝去是实例化bean,装配好bean之间的依赖关系后为上层提供准备就绪的运行环境,Spring提供一个配置文件描述bean和bean之间的依赖关系,利于Java的反射功能实例化bean,并在建立bean之间的依赖关系。

Spring IOC支持的功能:

  1. 依赖注册
  2. 依赖检查
  3. 自动装配
  4. 支持集合
  5. 指定初始化方法和销毁方法
  6. 支持回调方法

Spring是如何设计容器的??

从Spring IOC容器的两个接口来说:BeanFactory和ApplicationContext

BeanFactory:Spring框架最核心的接口

提供了IOC的各种配置机制,包含了Bean的各种定义便于实例化bean,建立了bean之间的依赖关系,Bean的生命周期的控制也是它负责的。

BeanFactory是一个顶级接口:
在这里插入图片描述
在BeanFactory基础上又设计了一个更高级的接口,就是ApplicationContext,是BeanFactory的子接口之一。

二者比较来看,BeanFactory是Spring框架的基础设施,面向Spring,ApplicationContext面向使用Spring框架的开发者。

ApplicationContext功能如下:

  1. BeanFactory:能够管理,装配Bean
  2. ResourcePatternResolver:能够加载资源文件
  3. MessageSource:能够实现国际化等功能
  4. ApplicationEventPublisher:能够注册监听器,实现监听机制

getBean方法的代码逻辑:

  1. 转换beanName
  2. 从缓存中加载实例
  3. 实例化Bean
  4. 检测parentBeanFactory
  5. 初始化依赖的Bean
  6. 创建Bean
  7. 检查Bean符合要求之后将Bean进行返回

Spring方面的经典考题:

  1. SpringBean的五个作用域

Singleton:Spring的默认作用域,为每一个IOC容器创建唯一的Bean实例,适合有状态的Bean。

prototype:针对每个getBean请求,容器都会创建一个bean实例,所以适合无状态的Bean,创建prototype成本是很高的。

如果是web容器,则额外支持以下三种作用域:

request:会为每个Http请求创建一个Bean实例

session:会为每个session创建一个Bean实例

globalSession:会为每个全局Http Session 创建一个Bean实例,该作用域仅仅对Portlet有效。

  1. Spring Bean的生命周期

容器创建之后会解析,并且创建出来bean,Spring Bean的生命周期主要有创建和销毁:

创建Bean:

  1. 实例化Bean对象,以及设置Bean属性;
  2. 通过使用各种Aware接口,注入Bean对容器基础设施的依赖,让容器感知到Bean的存在;
  3. 紧接着调用BeanPostProcessor的前置初始化方法postProcessBeforeInitialization,主要是在Spring Bean完成初始化实例之后,添加一些自定义的处理逻辑;
  4. 如果实现InitializingBean.afterPropertiesSet,会针对自定义初始化的Bean去做一些自定义的事情;
  5. 之后定义Bean init,初始化Bean;
  6. 调用BeanPostProcessor的后置初始化方法postProcessAfterInitialization,做一些Bean初始化实例之后的自定义工作,最后就成功创建了Bean。

销毁Bean:

  1. 如果Bean实现了DisposableBean接口,就会调用destroy方法;
  2. 如果配置了destroy-method属性,则会调用其配置的销毁方法。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值