springboot

springboot


1. 优点

  1. 依赖管理
  2. 自动装配

2. 依赖管理

  1. maven中继承parent,进行统一依赖版本管理
  2. 使用starter,进行统一的依赖引入

3. 自动装配

spring启动自动完成一些bean创建,并加载到容器

  1. 使用@EnableAutoConfiguration(springboot中enable注解,其作用就是借助@import将特定的bean导入容器)
  2. @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方法

  1. 初始化监听器:spring.factories的listener getRunListeners
  2. 构造context(应用上下文)环境:如读取配置文件,封装到environment对象 prepareEnvironment
  3. 创建context:createApplicationContext
  4. 刷新context前准备:配置context prepareContext
  5. 刷新context:spring方法 refreshContext
  6. context扩展接口 afterRefresh

5. profile

  1. 编写配置文件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. 源码阅读

  1. 容器启动过程中,会将类解析成beandefinition,并将definition存储到beanfactory的map中
  2. invoke即执行

8. 注解

@import
(在invokeBeanFactoryPostProcessors阶段处理)

  1. 导入@Configuration或者普通bean(实现导入非主类的配置类,组合配置)
  2. 导入实现selector的类,通过getImports,返回一系列类名
  3. 导入实现registrar的类(可修改bean定义)

@Configuration

  1. 将config映射成bean
  2. @EnableConfigurationPropertis(导入外部的configbean)、@Component:本地bean

9. 自定义starter

优点:

  1. 简化组件配置
  2. 统一管理组件依赖
  3. 自定义starter命名为xxx-spring-boot-starter

步骤

  1. 依赖spring-boot-configure
  2. 编写需要自动装配的类
  3. 编写配置类
  4. 编写spring.factories,key为EnableAutoConfiguration

使用enable*方式

  1. 新增标记类
  2. 编写注解enable*,功能为导入标记类
  3. 在配置类中添加@Conditional*判断类是否存在
posted @ 2022-04-21 00:17  6cc  阅读(29)  评论(0)    收藏  举报