核心类&方法
BeanDefinition


Bean的定义信息,封装bean的基本信息,从中可以获取类名、是否是单例、是否被注入到其他bean中、是否懒加载、bean依赖的bean的名称等。
Aware

继承Aware的bean可以感知到他在容器中的一些属性,如获取bean在容器中的ID,甚至获取到容器等。
BeanPostProcessor

Bean的后置处理器,可在bean的创建、初始化等阶段的前后对bean进行增强处理等。
BeanFactory


以Factory结尾,表示它是一个工厂类(接口),用于管理Bean的一个工厂。在Spring中,BeanFactory是IOC容器的核心接口,它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。
是访问容器的顶层接口,他的实现类中会有一个MAP,用于存储bean的BeanDefinition。
(与FactoryBean区别:实现FactoryBean接口也是在容器中注入bean的方式之一,但它不是一个普通的bean,而是生成指定bean的一个工厂)
AbstractAutowireCapableBeanFactory:: populateBean(..)
DefaultListableBeanFactory继承了AbstractAutowireCapableBeanFactory
此方法用于给bean注入依赖的其他bean
BeanWrapper
将交于容器管理的bean装饰,屏蔽多样性,统一的set、get方法,方便统一操作
核心流程源码
AnnotationAwareAspectJAutoProxyCreator创建过程
AOP核心类:AnnotationAwareAspectJAutoProxyCreator,本质是一种BeanPostProcessor
容器启动时:
==》 org.springframework.context.annotation.AnnotationConfigApplicationContext#AnnotationConfigApplicationContext(java.lang.Class<?>...) register(annotatedClasses);//加载、注册配置类;配置类也是一个被容器管理的bean refresh();//刷新容器,注册、创建相关bean==》 org.springframework.context.support.AbstractApplicationContext#refresh // Register bean processors that intercept bean creation. registerBeanPostProcessors(beanFactory);//注册容器需要的核心BeanPostProcessor // Instantiate all remaining (non-lazy-init) singletons. finishBeanFactoryInitialization(beanFactory);//创建并初始化其他非懒加载的bean,主要是业务类bean==》 org.springframework.context.support.AbstractApplicationContext#registerBeanPostProcessors ==》 org.springframework.context.support.PostProcessorRegistrationDelegate#registerBeanPostProcessors(org.springframework.beans.factory.config.ConfigurableListableBeanFactory, org.springframework.context.support.AbstractApplicationContext) // Separate between BeanPostProcessors that implement PriorityOrdered, Ordered, and the rest. //根据继承的order等级,顺序创建BeanPostProcessor //AnnotationAwareAspectJAutoProxyCreator实现了Order //创建 BeanPostProcessor pp = beanFactory.getBean(ppName, BeanPostProcessor.

