标签:例子 ora serve 加载 enable 课程 ice 接口 框架
导语
如何开发一个自定义的 starter
Java SPI 机制简介
Java SPI 机制示例
Spring Boot SPI 机制底层实现
开发一个自定义 starter
自定义 starter 优化
总结
导语
熟悉 Spring Boot 的同学都知道,Spring Boot 提供了很多开箱即用的 starter,比如 spring-boot-starter-mail、spring-boot-starter-data-redis 等等,使用这些 starter 非常简单,引入依赖,再在配置文件中配置相关属性即可。本课程教您自己开发一个 starter,具备了这个技能后,您可以在工作中封装自己业务相关的各种 starter。
如何开发一个自定义的 starter
开发一个 starter 简单来说以下几步即可:
一个/多个自定义配置的属性配置类(可选)
一个/多个自动配置类
自动配置类写入到 Spring Boot 的 SPI 机制配置文件:spring.factories
Java SPI 机制简介
Spring Boot 的 starter 的核心其实就是通过 SPI 机制自动注入配置类,不过是它自己实现的一套 SPI 机制,我们先了解一下 Java 的 SPI 机制。
SPI 全称 Service Provider Interface,是 Java 提供的一套用来被第三方实现或者扩展的 API,它可以用来启用框架扩展和替换组件。
SPI 的大概流程是:
调用方 –> 标准服务接口 –> 本地服务发现 (配置文件) –> 具体实现
所以 Java SPI 实际上是“基于接口的编程+策略模式+配置文件” 组合实现的动态加载机制。
一个 SPI 的典型案例就是 JDBC 的驱动,Java JDBC 定义接口规范(java.sql.Driver),各个数据库厂商(MySQL/Oracle/MS SQLServer 等)去完成具体的实现,然后通过 SPI 配置文件引入具体的实现类,如下图:
jdbc spi
Java SPI 机制示例
一个简单的 Java SPI 开发步骤:
定义一个业务接口
编写接口实现类
创建 SPI 的配置文件,实现类路径写入配置文件中
通过 Java SPI 机制调用
java spi例子
Spring Boot SPI 机制底层实现
了解了 Java 的 SPI 机制后,基本也能猜出 Spring Boot 的 SPI 实现了,基本流程是一样的:
读取配置文件 –> 将具体的实现类装配到 Spring Boot 的上下文环境中
接下来我们从源码中查找答案。
入口:Spring Boot 的启动类,@SpringBootApplication 注解,查看源码可以发现这是一个组合注解,包括 @SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan。
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM,
classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
...
}
@Enab
隐藏内容
标签:例子 ora serve 加载 enable 课程 ice 接口 框架
原文地址:https://www.cnblogs.com/ibeisbsj/p/12859268.html