关闭

Spring IOC原理和流程

239人阅读 评论(0) 收藏 举报
分类:

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


1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:168128次
    • 积分:2523
    • 等级:
    • 排名:第14595名
    • 原创:88篇
    • 转载:39篇
    • 译文:0篇
    • 评论:26条
    GitHub
    博客专栏
    最新评论