Spring 源码 (1)Spring IOC Bean 创建的整体流程

743 篇文章 3 订阅
742 篇文章 2 订阅

Spring IOC 中涉及的重要接口

  • BeanDefinition
    Bean 的描述信息,实现类包括 RootBeanDefinition 和 GenericBeanDefinition ,Bean的描述信息中定义了一系列Bean的信息,比如: beanClassName 、 scope 、 lazyinit 、 dependsOn 、 primary 、 initMethodName 、 destroyMethodName 、 isSington 、 isAbstract 等信息。

  • BeanDefinitionReader

    用于解析 Bean 的资源阅读器,比如针对于 XML 文件的配置的 Bean ,实现类 XmlBeanDefinitionReader ,针对 properties 文件的配置的 Bean ,实现类为 PropertiesBeanDefinitionReader , Spring 在启动时会将 xml 文件通过 loadBeanDefinitions 方法进行解析。

  • BeanFactory
    是 IOC 容器实现的顶层接口,默认的实现为 DefaultListableBeanFactory , Spring Bean 的整个生命周期都是由 DefaultListableBeanFactory 去管理的, 这个类非常的重要 。

  • BeanFactoryPostProcessor

    这个接口是 BeanFactory 的增强处理器,用于在 Bean 加载为 BeanDefinition 之后的扩展,比如实现类 PlaceHolderConfigurerSupport 就是用来处理占位符解析的,当我在 xml 文件中配置 jdbc 信息的时候,通过是用 ${xxx.jdbUrl} 这种方式配置数据库连接的时候,就是通过这个类来处理和解析的。

  • Aware

    这个接口,他下面有一堆的子接口,比如 BeanNameAware 、 ApplicationContextAware 、 BeanFactoryAware 、 EnvironmentAware 等,可以通过实现这些接口完成 ioc 容器中特定信息的设置,比如 EnvironmentAware ,可以在 Bean 创建过程中设置环境信息到对应的 Bean 对象中,后期通过 bean 对象获取环境信息数据。

  • BeanPostProcessor

    这个接口是 Bean 的增强处理器,用于在 Bean 进行初始化时调用 init-method 方法的前后进行增强,他有两个方法: postProcessBeforeInitialization 和 postProcessAfterInitialization ,分别用于 bean 初始化方法 init-method 之前和之后调用,当然还可以进行很多扩展,比如 aop 就是通过 postProcessAfterInitialization 方法中去创建动态代理对象。

Spring Bean 的生命周期

  • 首先通过BeanDefinitionReader将xml中的Bean配置加载到BeanDefinition中
  • 然后将BeanDefinition放入DefaultListableBeanFacotry的beanDefinitionMap和beanDefinitionNames集合中
  • 然后调用BeanFactoryPostProcessor#postProcessorBeanFactory对容器中的BeanDefinition的属性进行增强解析
  • 然后通过反射调用对象的构造函数进行对象的实例化
  • 然后调用populateBean进行属性填充
  • 然后调用初始化方法initializeBean,初始化时又会先调用invokeAwareMethods方法执行一堆的Aware方法
  • 然后BeanPostProcessor#postProcessBeforeInitialization方法执行bean增强器的前置处理
  • 然后调用InitializingBean#afterPropertiesSet方法或者是调用自定义的init-method方法
  • 然后调用BeanPostProcessor#postProcessAfterInitialization方法执行bean增强的后置处理
  • 最后完成Bean的创建,最终放入一级缓存singletonObjects中

整体流程大概就是这个,有了整体流程就可以进行下一步Bean创建的细节解读。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值