Spring

  • Spring容器,通常指的是ApplicationContext体系结构;即整个Spring框架的IOC性能,是通过ApplicationContext接口的实现类来为应用程序服务的,应用程序通过ApplicationContext的办法来间接与Bean工厂交互,如获取Bean对象实例等
  • ApplicationContext的顶层接口正是beanFactory;因而,Spring容器的实质也能够了解为bean工厂(beanFactory,或者bean容器),它依照咱们的要求,生产须要的各种bean;在生产bean的过程中,为了解决bean之间的依赖问题,才引入了依赖注入(DI)这种技术;也就是说依赖注入是beanFactory生产bean时为了解决bean之间的依赖的一种技术而已

BeanDefinition

protected AbstractBeanDefinition(BeanDefinition original) {    setParentName(original.getParentName());    setBeanClassName(original.getBeanClassName());    setScope(original.getScope());    setAbstract(original.isAbstract());    setFactoryBeanName(original.getFactoryBeanName());    setFactoryMethodName(original.getFactoryMethodName());    setRole(original.getRole());    setSource(original.getSource());    copyAttributesFrom(original);    // 此处省略}

从源码可知,BeanDefinition其实是Bean的一些元数据定义,包含父类名称(parenName)、类名(baenClassName)、作用域(scope)等信息;

通过BeanDefinitionReader获取到BeanDefinition之后,咱们再通过BeanDefinitionRegistry将beanDefinition注册到BeanFacory中,存储在BeanFactory的conCurrentHashMap中,key=beanName,Value=BeanDefinition;

那么获取Bean就从conCurrentHashMap中通过BeanName获取对应的Bean信息

BeanDefinitionReader

bean元数据读取器(或能够了解为解析器)
BeanDefinitionReader会从 xml文件;@Component等注解类;@Configuration等配置类,获取BeanDefinition,而后注册到BeanFactory中;
留神,AnnotatedBeanDefinitionReader并没有实现BeanDefinitionReader,此处的BeanDefinitionReader泛指元数据读取器

BeanFactory

即bean工厂,所有开始的源头
在我学习SpringBoot启动的过程中上下文默认加载的是DefaultListableBeanFactory,本文临时不进行深究,等前期有闲暇再来补完;

DefaultListableBeanFactory是
BeanFactory接口体系的默认实现类,提供BeanDefinition的存储map,Bean对象的存储map;
而Bean对象实例的存储map,定义在FactoryBeanRegistrySupport,FactoryBeanRegistrySupport实现了SingletonBeanRegistry接口,而DefaultListableBeanFactory的基类AbstractBeanFactory,继承于FactoryBeanRegistrySupport

BeanFactoryPostProcessor

  • BeanFactoryPostProcessor是BeanFactory的后置处理器,BeanFactory创立实现,加载其所蕴含的所有获取BeanDefinition,但还没有实例化bean之前,执行,具体为调用postProcessBeanFactory办法
  1. 加载更多的bean元数据
    ConfigurationClassPostProcessor,用于从BeanFactory中检测应用了@Configuration注解的类,对于这些类对应的BeanDefinitions汇合,遍历并顺次交给ConfigurationClassParser,ConfigurationClassBeanDefinitionReader解决,别离是解决与@Configuration同时应用的其余注解和将类外部的应用@Bean注解的办法,生成BeanDefinition,注册到BeanFactory
  2. 对bean元数据进行加工解决
    BeanDefinition属性填充&批改,在postProcessBeanFactory办法中,能够对beanFactory所蕴含的beanDefinitions的propertyValues和构造函数参数值进行批改,如应用PropertyPlaceHolderConfigurer来对BeanDefinition的propertyValues的占位符进行填充与赋值,或者应用PropertyResourceConfigurer获取config文件中属性,对BeanDefinitions的相干属性进行赋值或者值笼罩

BeanPostProcessor

  • BeanPostProcessor是bean对象后置处理器,负责对已创立好的bean对象进行加工解决,次要是能够对新创建的bean实例进行批改,提供了一个相似于hook机制,对创立好的bean对象实例进行批改
  1. postProcessBeforeInitialization,创立完bean实例,在任何初始化办法执行之前,执行该办法
  2. postProcessAfterInitialization,创立完bean实例,在所有初始化办法执行之后,执行该办法

(未完)

参考资料:
https://blog.csdn.net/u010013...
https://blog.csdn.net/qq_3668...
https://blog.csdn.net/weixin_...