mica-auto 使用文档
当前版本 v3.1.3
JDK版本 JDK17
SpringBoot版本 3.2.4
mica-auto 采用 Annotation Processor 技术,自动生成 java spi 和 Spring boot starter 的配置。
功能
- 生成 spring.factories。
- 生成 spring-devtools.properties
- 生成 FeignClient 到 spring.factories 中,供 mica-cloud 中完成 Feign 自动化配置。
- 生成 java spi 配置,需要添加 @AutoService 注解。
使用场景
主要是用来避免 Spring boot 主项目包同 子项目或者子模块 包不一致,避免包扫描不到的问题。
- spring boot starter利器,自动生成 spring.factories 配置。
- 多模块项目中的子项目(不建议主项目添加 mica-auto)。
原理
mica auto 采用 Annotation Processor,她不是什么新技术,在 jdk 1.6 就存在了。 Annotation Processor 是 javac 的一个工具,它用来在编译时扫描和处理注解。通过 Annotation Processor 可以获取到注解和被注解对象的相关信息,然后根据注解自动生成Java代码,省去了手动编写,提高了编码效率。大名鼎鼎的 Lombok 也是采用的该技术。
注解说明
| 注解 | 生成的 spring.factories 或 spi key |
|---|---|
| @AutoContextInitializer | ApplicationContextInitializer |
| @AutoListener | ApplicationListener |
| @AutoRunListener | SpringApplicationRunListener |
| @AutoEnvPostProcessor | EnvironmentPostProcessor |
| @AutoFailureAnalyzer | FailureAnalyzer |
| @AutoConfigImportFilter | AutoConfigurationImportFilter |
| @AutoTemplateProvider | TemplateAvailabilityProvider |
| @AutoEnableCircuitBreaker | EnableCircuitBreaker |
| @AutoConfigDataLocationResolver | ConfigDataLocationResolver |
| @AutoConfigDataLoader | ConfigDataLoader |
| @AutoDatabaseInitializerDetector | DatabaseInitializerDetector |
| @AutoDependsOnDatabaseInitializationDetector | DependsOnDatabaseInitializationDetector |
| @Component | EnableAutoConfiguration |
| @AutoIgnore | 忽略,不生成到 spring.factories |
| @AutoService | 生成 java spi 配置 |
| 注解 | aot.factories |
|---|---|
| @AotRuntimeHintsRegistrar | RuntimeHintsRegistrar |
| @AotBeanRegistration | BeanRegistrationAotProcessor |
| @AotBeanFactoryInitialization | BeanFactoryInitializationAotProcessor |
依赖
版本说明
| version | spring boot version | java version |
|---|---|---|
| 3.x | 3.x | 17 |
| 2.3.1 | 1.x ~ 2.x | 1.8 |
maven
xml
<dependency>
<groupId>net.dreamlu</groupId>
<artifactId>mica-auto</artifactId>
<version>${version}</version>
<scope>provided</scope>
</dependency>gradle >= 5.x
annotationProcessor("net.dreamlu:mica-auto:${version}")gradle < 5.x
compileOnly "net.dreamlu:mica-auto:${version}"注意: 如果你项目中使用了 Lombok 请将 mica-auto 的依赖放置到 Lombok 后面。
示例
java spi
- 添加注解 @AutoService 指定 spi 接口 Processor.class。
java
package foo.bar;
import javax.annotation.processing.Processor;
@AutoService(Processor.class)
public class MyProcessor implements Processor {
// …
}- @AutoService 将会自动生成 spi 的配置文件 META-INF/services/javax.annotation.processing.Processor 内容如下:
java
foo.bar.MyProcessorSpring boot starter
- 组合有 @Component 的注解,例如:@Configuration,其他的类似 ApplicationContextInitializer 需要自行添加注解,详见 mica-auto 注解说明。
java
/**
* 自动配置
*
* @author l.cm
*/
@Configuration(proxyBeanMethods = false)
public class MicaAutoConfiguration {
@Bean
public SpringContextUtil springUtils() {
return new SpringContextUtil();
}
}- 将会生成 META-INF/spring.factories 文件,避免手动编写或者修改该文件,内容如下:
java
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
net.dreamlu.mica.config.MicaAutoConfiguration