源码解读springboot(1)
Springboot自动装配:
SpringBoot自动装配是通过@SpringBootApplication注解触发,基于条件注解和spring.factories文件实现依赖的自动配置,从而简化开发。
主要实现自动化配置的核心是@SpringBootApplication中的@EnableAutoConfiguration,
该注解通过`@Import`注解导入AutoConfigurationImportSelector配置选择器。在选择器内部内部就是读取了 项目和该项目引用的Jar包的的classpath路径下META-INF/spring.factories文件中的所配置的类 的全类名。
在这些配置类中所定义的Bean会根据条件注解所指定的条件来决定是否需要将其导入到Spring容器中。这样就完成了自动装配
一般条件判断会有像`@ConditionalOnClass`这样的注解,判断是否有对应的class文件,如果有则加载该类,把这个配置类的所有的Bean放入spring容器中使用。
SpringBoot的启动流程:
首先SpringBoot的启动流程分为两个阶段
1.实例化阶段 new SpringApplication()主要是通过spi的方式读取了spring.factories里面的监听器(listeners)和应用上下文的初始化器(ApplicationContextInitializer),保留当前配置类作为启动类
2.执行run方法,首先,读取 环境变量 配置信息并创建springApplication上下文:ServletWebServerApplicationContext
并且预初始化上下文 : 将启动类作为配置类进行读取同时将配置注册为BeanDefinition
然后调用refresh 加载ioc容器,通过invokeBeanFactoryPostProcessor -- 解析@Component |@PropertySource |@ComponentScan(s)@Import: 加载所有的自动配置类
在使用onRefresh 创建(内置)servlet容器最后完成Springboot的启动流程