Skip to content

mica-auto 使用文档

当前版本 v3.1.3

JDK版本 JDK17

SpringBoot版本 3.2.4

mica-auto 采用 Annotation Processor 技术,自动生成 java spi 和 Spring boot starter 的配置。

功能

  1. 生成 spring.factories。
  2. 生成 spring-devtools.properties
  3. 生成 FeignClient 到 spring.factories 中,供 mica-cloud 中完成 Feign 自动化配置。
  4. 生成 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
@AutoContextInitializerApplicationContextInitializer
@AutoListenerApplicationListener
@AutoRunListenerSpringApplicationRunListener
@AutoEnvPostProcessorEnvironmentPostProcessor
@AutoFailureAnalyzerFailureAnalyzer
@AutoConfigImportFilterAutoConfigurationImportFilter
@AutoTemplateProviderTemplateAvailabilityProvider
@AutoEnableCircuitBreakerEnableCircuitBreaker
@AutoConfigDataLocationResolverConfigDataLocationResolver
@AutoConfigDataLoaderConfigDataLoader
@AutoDatabaseInitializerDetectorDatabaseInitializerDetector
@AutoDependsOnDatabaseInitializationDetectorDependsOnDatabaseInitializationDetector
@ComponentEnableAutoConfiguration
@AutoIgnore忽略,不生成到 spring.factories
@AutoService生成 java spi 配置
注解aot.factories
@AotRuntimeHintsRegistrarRuntimeHintsRegistrar
@AotBeanRegistrationBeanRegistrationAotProcessor
@AotBeanFactoryInitializationBeanFactoryInitializationAotProcessor

依赖

版本说明

versionspring boot versionjava version
3.x3.x17
2.3.11.x ~ 2.x1.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.MyProcessor

Spring 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