springboot
springboot
1. 优点
- 依赖管理
- 自动装配
2. 依赖管理
- maven中继承parent,进行统一依赖版本管理
- 使用starter,进行统一的依赖引入
3. 自动装配
spring启动自动完成一些bean创建,并加载到容器
- 使用@EnableAutoConfiguration(springboot中enable注解,其作用就是借助@import将特定的bean导入容器)
- @EnableAutoConfiguration就是导入两个bean
- Registrar:注册basepackage对象,标识基础路径(后续使用)
- AutoConfigurationImportSelector:
- 加载spring.factories文件(每个组件都有,用于加载主类路径下之外的类),key为EnableAutoConfiguration的value作为自动装配类集合
- 根据自动装配类上的@Conditional*条件注解,过滤不需要的类,将剩余类加载
详细版:
- springboot执行run,在run中的prepareContext阶段,将主类解析成definition注册到容器
- 在spring的刷新容器阶段,会在invokeBeanFactoryPostProcessor,解析并处理标注在主类的注解
- @ComponentScan:扫描主类下所有注解,并将需要的bean注册到registry
- @Import:导入selector,该selector读取spring.factories的自动配置类全限定名,并完成配置类以及其配置的bean注册
4. run方法
- 初始化监听器:spring.factories的listener getRunListeners
- 构造context(应用上下文)环境:如读取配置文件,封装到environment对象 prepareEnvironment
- 创建context:createApplicationContext
- 刷新context前准备:配置context prepareContext
- 刷新context:spring方法 refreshContext
- context扩展接口 afterRefresh
5. profile
- 编写配置文件application-{}.properties
- 通过maven参数传递进应用 profile.properties;spring.profile.ative=@profile.active@
- springboot可通过args参数 --spring.profile.ative=dev
6. 配置文件
优先级:classpath:/config>classpath:>工程目录:/config>工程目录:
ps:classpath:即类路径,resources目录文件会负载到classes
7. 源码阅读
- 容器启动过程中,会将类解析成beandefinition,并将definition存储到beanfactory的map中
- invoke即执行
8. 注解
@import
(在invokeBeanFactoryPostProcessors阶段处理)
- 导入@Configuration或者普通bean(实现导入非主类的配置类,组合配置)
- 导入实现selector的类,通过getImports,返回一系列类名
- 导入实现registrar的类(可修改bean定义)
@Configuration
- 将config映射成bean
- @EnableConfigurationPropertis(导入外部的configbean)、@Component:本地bean
9. 自定义starter
优点:
- 简化组件配置
- 统一管理组件依赖
- 自定义starter命名为xxx-spring-boot-starter
步骤
- 依赖spring-boot-configure
- 编写需要自动装配的类
- 编写配置类
- 编写spring.factories,key为EnableAutoConfiguration
使用enable*方式
- 新增标记类
- 编写注解enable*,功能为导入标记类
- 在配置类中添加@Conditional*判断类是否存在

浙公网安备 33010602011771号