Spring IOC原理和流程

Spring的控制反转(IOC),简单来说,就是运用反射技术,

  1. 动态生成对象
  2. 将配置文件中的属性值注入到对象中
具体的流程为,
  1. Resource定位
  2. BeanDefinition的载入和解析
  3. BeanDefinition的注册
  4. 依赖注入
下面详细谈一下各个流程,


Resource定位

Resource资源就是xml配置文件,对xml的抽象,包含了BeanDefinition的定义信息。由于配置信息来源的多样化,所以Resource也有不同的抽象实现,

  • ClassPathResource可用来获取类路径下的资源文件。      
  • FileSystemResource可用来获取文件系统里面的资源。
  • UrlResource可用来代表URL对应的资源,它对URL做了一个简单的封装。通过给定一个URL地址,我们就能构建一个UrlResource。
  • ByteArrayResource是针对于字节数组封装的资源,它的构建需要一个字节数组。
  • ServletContextResource是针对于ServletContext封装的资源,用于访问ServletContext环境下的资源。
  • InputStreamResource是针对于输入流封装的资源,它的构建需要一个输入流。
针对以上各种Resource资源,运用ResourceLoader定位。ResourceLoader是一个接口,用于实现不同的Resource加载策略。


BeanDefinition的载入和解析

获取到Resource后,需要将Resource中对bean的定义转化为BeanDefinition。

BeanDefinition是对bean的描述,有属性值,构造参数和具体实现提供的其他信息。

过程包括,

  1. 读取配置文件
  2. 封装成BeanDefinition对象


BeanDefinition的注册

构建完数据表示后,需要对这些数据进行注册。具体是调用BeanDefinitionRegistry接口的实现类,完成向容器的注册,就是存入一个HashMap中。


依赖注入

运用反射机制,在getBean()方法调用时,生成对应的bean对象。实例化方法分为,

  1. JVM反射
  2. CGLIB
如果BeanDefinition中lazy-init设置的是true,则会在初始化过程中创建注入而不是在getBean()这里。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值