Spring IOC概念与原理详解

IOC

IOC,Inversion Of Control,直译过来就是控制反转,它是一种设计思想。

在传统的Java Se中,我们通过new来创建一个新的对象,是程序主动去创建依赖对象。而IOC有一个专门的容器来创建这些对象,也就是说,由IOC容器来进行对象的创建,将它们装配在一起,并管控其完整的生命周期。对象的创建由主动行为变成被动行为,控制权颠倒过来了,这也就是"控制反转"名称的由来。IOC的流程如下图所示。
IOC流程图
既然IOC是控制反转,那么到底哪些方面被反转了呢?主要是获取依赖对象的过程被反转了。控制被反转后,获取依赖对象的过程由用户管理变更为由IOC容器注入。因此,IOC也被称为依赖注入(Dependency Injection)。

IOC容器:
IOC容器是Spring框架的核心,帮助用户管理bean从创建到销毁的整个生命周期,用户只是通过getBean("beanName")来获取并使用bean对象。在Spring中,一般存在三级缓存,使用Map结构来存储对象。最常用的是一级缓存singletonObjects,用来存放完整bean对象。
Spring容器有一个最上层的根接口BeanFactory,没有提供对应的子类实现。在实际的应用过程中,最普遍使用是DefaultListableBeanFactory。另外一个常用的是ApplicationContext,它是实现了BeanFactory接口的一个针对Web开发而产生的拥有更多spring定制功能的容器。

Spring容器在开发中所起到的作用就是将xml、注解等配置元信息包装成bean对象。这个过程可以分为两部分:

  • 容器的启动:将所有的配置信息(xml、注解)通过BeanDefinition类进行封装,生成对应的BeanDefinition对象。然后调用BeanDefinitionRegisterregister方法将其加入的register容器中。
  • 容器中bean的实例化:当所有的BeanDefinition对象都准备完毕,spring就会开始getBean() -> doGetBean()->createBean() -> doCreateBean() 来创建对象。

IOC的底层实现(执行逻辑):

  1. 先通过createBeanFactory创建出一个Bean工厂,一般是DefaultListableBeanFactory
  2. 将所有的配置信息封装为BeanDefinition对象。
  3. Bean工厂创建完成后,开始循环创建对象。由于容器中的bean默认是单例,因此先通过getBean() -> doGetBean()从容器中查找。
  4. 如果容器中找不到,通过createBean() -> doCreateBean() -> createBeanInstance(),以反射的方式来创建bean对象。一般通过getDelaredConstructor()来获取无参构造器,并通过newInstance()来创建对象。
  5. 通过populateBean()来进行对象的属性填充。
  6. 通过initializingBean()来对进行其他的初始化操作。

依赖注入DI:
依赖注入DI,其实和IOC是同一个东西。IOC是一种思想,DI是具体的实现方式。从Spring容器的角度来看,容器把对象赋值给调用者的成员变量。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值