Spring加载流程是,先扫描所有注解或者配置文件,然后通过反射加载到BeanDefinition类里,然后每一个Bean信息都是一个BeanDefinition,这里面包含了bean的id,class全类名,name,单例,然后每一个bean都会产生对应的BeanDefinition,然后这些beandefinition是通过beandefinitionmap进行管理的,他们都存在annotationapplicationcontext,然后获取bean实际上是beanfactory获取的,只不过applicationcontext可以将多个配置文件的信息同时加载,而且它还具有懒加载的功能,如果光是beanfactory还得手动注册bean的信息。之后通过构造方法或者字段注入等,将bean信息注入到指定字段上,让如果实现了aware接口,比如BeanNameaware可以获取bean的名字,BeanFactoryAware、ApplicationContextAware。接下来就是通过BeanPostProccser下的beforeXXX进行初始化前的一些方法然后进行initBeanFactory下的afterpropertiSet放法实现初始化功能,可以自定义一些方法,初始化完成之后进行BeanPostProccser的afterXX方法,此时AOP就在这里进行的,因为AOP增强的肯定是可以用的bean里的各种方法,不然AOP在之前出现,就没有意义了因为bean都没被创建,代理对象都无法生成。之后使用然后进行销毁disableFactory的destroy方法销毁。
自动装配原理就是先通过@SpringBootApplication中的enableAutoConfigutation注解引入的Import注解,在spring加载IOC容器的时候,会获取里面的的一个组件,他会读取META-INF/spring.factories的文件信息,然后过滤出所有AutoCofigutationClass类型(因为这个文件里包括了很多类),然后通过@ConditionOnXXX过滤出无效的自动配置类