SpringBoot-创建自己的starter和autoconfiguration
来源:互联网 发布:windows xp硬盘安装版 编辑:程序博客网 时间:2024/06/05 16:54
以前对于SpringBoot的starter机制一直很好奇,为什么我们引入一个开源框架的starter,就可以直接使用了,如何做到的。于是就看了几个starter的源码,探究一下。
(1)其实对于每个starter里面并没有源码,只是依赖了一个对应的autoconfiguration,这个autoconfiguration的jar包下有一个XxxxxxAutoConfiguration.class,里面配置了框架启动需要自动注入的一些bean(默认优于配置)。所以会自动启动这个XxxxxxAutoConfiguration.class
(2)在META-INF/spring.factories加上自动装配配置;META-INF/spring-configuration-metadata.json下配置application.properties的key-value的提示项。
创建步骤
(1)实现XxxxxxAutoConfiguration.class类,并加上@Conditional限制条件
这需要实现需要自动装载的bean
(2)在META-INF/spring.factories里面加上如下:
# 如果有多个XxxxxAutoConfiguration,用逗号分隔org.springframework.boot.autoconfigure.EnableAutoConfiguration=xxx.xxx.xxx.xxx.XxxxxAutoConfiguration
(3)限制Auto-Configuration的顺序
使用 @AutoConfigureAfter or @AutoConfigureBefore可以限制XxxxxxAutoConfiguration.class的加载顺序
(4)创建metadata
(META-INF/spring-configuration-metadata.json) to make sure your keys are properly documented.
这里的配置是作用XxxxxxAutoConfiguration需要用到的一些properties的,这些properties我们可以写在application.properties里面,然后通过这个文件的规约给出提示。
此外我们可以写一个XxxxProperties.java, 然后通过 @ConfigurationProperties 注解,自动装载application.properties的值到XxxxProperties.java中。
(5)编写startermodule,引入Auto-Configuration这个module
- SpringBoot-创建自己的starter和autoconfiguration
- springboot构建自己的starter
- springboot构建自己的starter
- SpringBoot AutoConfiguration
- 禁用springboot中对mongodb的autoConfiguration
- 【SpringBoot】AutoConfiguration 解密
- springboot学习1-使用 Spring Starter Project快速创建基于spring-boot的web项目
- spring boot : 定制自己的starter
- Spring Boot:定制自己的starter
- SpringBoot starter pom
- 集成springboot-starter-security
- springboot之Starter POMs
- SpringBoot第四讲扩展和封装Spring Data JPA(一)_自定义Repository和创建自己的BaseRepository
- SpringBoot第四讲扩展和封装Spring Data JPA(一)_自定义Repository和创建自己的BaseRepository
- SpringBoot四大神器之Starter
- SpringBoot四大神器之Starter
- SpringBoot之starter(R)
- spring-boot-starter的理解和开发
- Linux基础命令学习笔记~2
- EditText中inputType使用
- 线程 Thread Runnable start run
- Streaming 101批处理之外的流处理世界
- OKHttp封装
- SpringBoot-创建自己的starter和autoconfiguration
- HDU
- 程序27
- 界面库
- Android 第三方轮播图控件ConvenientBanner:通用的广告栏控件
- 服务器Socket概述与实例
- JavaScript移动
- 什么是原子操作?Linux下有哪些原子操作API
- 程序28