扫码关注公众号
Spring容器启动流程是怎样的
1、在创建Spring容器,也就是启动Spring时:2、⾸先会进⾏扫描,扫描得到所有的BeanDefinition对象,并存在⼀个Map中3、然后筛选出⾮懒加载的单例BeanDefinition进⾏创建Bean,对于多例Bean不需要在启动过程中去进⾏创建,对于多例Bean会在每次获取Bean时利⽤BeanDefinition去创建4、利⽤BeanDefinition创建Bean就是Bean的创建⽣命周期,这期间包括了合并BeanDefinition、推断构造⽅法、实例化、属性填充、初始化前、初始化、初始化后等步骤,其中AOP就是发⽣在初始化后这⼀步骤中5、单例Bean创建完了之后,Spring会发布⼀个容器启动事件6、Spring启动结束7、在源码中会更复杂,⽐如源码中会提供⼀些模板⽅法,让⼦类来实现,⽐如源码中还涉及到⼀些BeanFactoryPostProcessor和BeanPostProcessor的注册,Spring的扫描就是通过BenaFactoryPostProcessor来实现的,依赖注⼊就是通过BeanPostProcessor来实现的8、在Spring启动过程中还会去处理@Import等注解
说说Spring Boot的启动流程
调用run方法,run方法的执行流程:当Springboot项目创建完成后会默认生成一个Application的入口类,该类中的main方法可以启动Springboot项目,在main方法中,通过SpringApplication的静态方法,即run方法进行SpringApplication的实例化操作,然后针对该实例化对象调用另一个run方法去完成整个项目的初始化和启动;SpringApplication的run方法的重要操作:获取监听器的参数配置,打印Banner信息,创建并初始化容器,监听器发送通知
Spring启动过程主要包含哪几个类
ContextLoaderListener,ContextLoader和XmlWebApplicationContext