laiwenqiang的专栏

It’s fucking miracle.

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()这里。


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/laiwenqiang/article/details/53995559
个人分类: 【Spring】
所属专栏: Spring解析
上一篇在线算法学习网站
下一篇栈的最小值查找(O1)
想对作者说点什么? 我来说一句

spring ioc和aop原理流程图(详细)

2015年08月27日 370KB 下载

Spring框架原理及详细搭建步骤

2016年11月25日 2.32MB 下载

没有更多推荐了,返回首页

关闭
关闭