当前位置: 首页 > news >正文

自定义xxx-spring-boot-starter

自定义xxx-spring-boot-starter

    • 概要
    • 1. 了解spring-boot-starter的核心注解
      • 1.1 @EnableAutoConfiguration
      • 1.2 @Import
    • 2.以mybatis-plus-boot-starter为例理解自定义starter
      • 2.1 创建配置类
      • 2.2 创建imports文件
      • 2.3 创建starter
    • 3. 手写一个自定义starter
      • 3.1 创建autoconfigure自动配置包
      • 3.2 创建starter包
      • 3.3 使用starter

概要

记录一个面试被问到的问题,springboot如何实现自动装配,使用springboot过程中,应该都使用过各种各样的spring-boot-starter,要如何自定义的starter,实现开箱即用?
要解答这个问题,需要了解几个Spring的注解:@EnableAutoConfiguration,@Import等。

1. 了解spring-boot-starter的核心注解

1.1 @EnableAutoConfiguration

我们知道springboot的核心注解@SpringBootApplication是一个组合注解,包含了
@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan。

  • @SpringBootConfiguration表示标注的类是一个spring的配置类;
  • @ComponentScan用于表示spring的包扫描路径 ,spring默认扫描路径为启动类所在包及其子包;
  • @EnableAutoConfiguration也是一个组合注解,包含了@AutoConfigurationPackage和@Import注解。其中@Import标识了要自动注入的类名,如@SpringBootApplication下@EnableAutoConfiguration里的@Import(AutoConfigurationImportSelector.class)引入了AutoConfigurationImportSelector类。

1.2 @Import

@SpringBootApplication中@Import(AutoConfigurationImportSelector.class)生效过程:

  1. Spring应用在启动时会调用beanfactory后置处理器(见AbstractApplicationContext#refresh()中的invokeBeanFactoryPostProcessors(beanFactory);
@Overridepublic void refresh() throws BeansException, IllegalStateException {//... 省略部分代码 ...// Invoke factory processors registered as beans in the context.// 调用bean工厂后置处理器invokeBeanFactoryPostProcessors(beanFactory);// Register bean processors that intercept bean creation.registerBeanPostProcessors(beanFactory);beanPostProcess.end();//... 省略部分代码 ...}
  1. 在beanfactory后置处理器ConfigurationClassPostProcessor处理过程中会调用配置类解析器(ConfigurationClassParser)中的parse(Set<BeanDefinitionHolder> configCandidates)方法去解析@Import中的属性值拿到@Import引入的类AutoConfigurationImportSelector
	/*** Build and validate a configuration model based on the registry of* {@link Configuration} classes.*/public void processConfigBeanDefinitions(BeanDefinitionRegistry registry) {//... 省略部分代码 ...StartupStep processConfig = this.applicationStartup.start("spring.context.config-classes.parse");// ConfigurationClassParser解析@Import注解parser

http://www.mrgr.cn/news/3735.html

相关文章:

  • 低安卓版本页面空白适配
  • Spring Boot 实战:集成 Apache Kafka 及注意事项
  • 【22-54】创建者模式(详解五大模式)
  • gligen 训练自己的数据
  • I2C学习:上拉电阻选取
  • 密码学之哈希算法
  • 總結熱力學_3
  • Vscode——如何实现 Ctrl+鼠标左键 跳转函数内部的方法
  • UX已死,产品重生
  • freecad遭遇网络不同无法安装插件Addon Manager: Unexpected 0 response from server
  • OpenJDK 和 OracleJDK 的区别、下载方式
  • playbook(剧本)基本应用、playbook常见语法、playbook和ansible操作的编排
  • AWS CDK测试初探:掌握Assertion测试模式
  • 【异步IO】libeventlibevlibuv的相关认识
  • 【uniapp】图片合成并导入base64
  • 基于RDMA技术的Mayastor解决方案
  • Ajax技术详解
  • python 将mysql转为csv、json导入到Doris数据库
  • 英国海外媒体通稿宣发:顶级媒体宣发
  • Java并发编程(19)—— CompletableFuture异步多线程