1.BeanDefinition: bean定义,通过这个生成bean,包含bean名,scope,依赖的bean名,是否是primary,factoryBeanName(是factoryBean才有),构造方法信息,initMethodName,destoryMethodName 等。
2.BeanDefinitionReader
3.BeanFactory
4.ApplicationContext
5.PlaceHolderConfigurerSupport 替换占位符
6.BeanFactoryPostProcessor:处理BeanFactory刚根据beanDefinition生成的实例,可进行各种包装处理返回。
BeanPostProcessor:处理bean实例,同样可进行增强后返回。
BeanFactoryPostProcessor:对Bean工厂进行处理,还没进行过改变其行为的操作,不知道有哪些骚操作(TODO)。此时所有的BeanDefinition已经加载,但未初始化。可以覆盖或者增加属性,或者提前初始化bean。这个修改的是context内部的BeanFactory的。PlaceholderConfigurerSupport --> PropertyResourceConfigurer --> BeanFactoryPostProcessor,PropertyResourceConfigurer 用于通过配置文件设置Bean的属性值,PlaceholderConfigurerSupport 占位符替换便是其一实现。
BeanDefinitionRegistryPostProcessor:
7.带aware的接口,基本会被spring以回调形式设置某种类型的值。例如
BeanNameAware:设置当前bean的名字;
BeanFactoryAware:设置当前的Bean工厂
ApplicationContextAware:设置当前的应用上下文
8.PriorityOrdered、Ordered,@Order spring中较为惯用的顺序设置工具,不管是filter,postProcessor,类的多重包装增强,都涉及操作顺序,
基本通过这3个处理。
9.DefaultListableBeanFactory,较为关键的beanFactory实现,beanDefinitionMap 存放bean定义。而这里获取bean的方式是不断通过 getParentBeanFactory() 查找parent里的,和双亲委派类似。
10. ConfigurationClassPostProceesor