mica-auto

Java CIJAVA 8mica-auto Maven

mica-automica 生态里的一个基础组件,用来生成 Spring Boot starter 所需的元数据配置。

它基于 Annotation Processor(JDK 1.6 就有的 javac 工具,Lombok 同款技术),在编译期扫描注解并自动生成配置文件,省去手写 spring.factories 的重复劳动。

🎯 使用场景

主要用来避免 Spring Boot 主项目包与子项目/子模块包不一致、导致包扫描不到的问题:

  • 自定义 spring boot starter
  • 多模块项目中的子项目不建议主项目添加 mica-auto

✨ 功能一览

  • 自动生成 spring.factoriesspring-devtools.properties
  • 生成 FeignClientspring.factories,供 mica-cloud 完成 Feign 自动化配置
  • 生成 java SPI 配置(需添加 @AutoService 注解)
  • 使用 @AutoConfiguration 时自动适配 Spring Boot 2.7+ 的 AutoConfiguration.imports

注解对照表

注解spring.factories 或 SPI key
@AutoContextInitializerApplicationContextInitializer
@AutoListenerApplicationListener
@AutoRunListenerSpringApplicationRunListener
@AutoEnvPostProcessorEnvironmentPostProcessor
@AutoFailureAnalyzerFailureAnalyzer
@AutoConfigImportFilterAutoConfigurationImportFilter
@AutoTemplateProviderTemplateAvailabilityProvider
@AutoEnableCircuitBreakerEnableCircuitBreaker
@AutoConfigDataLocationResolverConfigDataLocationResolver
@AutoConfigDataLoaderConfigDataLoader
@AutoDatabaseInitializerDetectorDatabaseInitializerDetector
@AutoDependsOnDatabaseInitializationDetectorDependsOnDatabaseInitializationDetector
@ComponentEnableAutoConfiguration
@AutoIgnore忽略,不生成到 spring.factories
@AutoServicejava SPI 生成配置
注解aot.factories
@AotRuntimeHintsRegistrarRuntimeHintsRegistrar
@AotBeanRegistrationBeanRegistrationAotProcessor
@AotBeanFactoryInitializationBeanFactoryInitializationAotProcessor

🔖 版本说明

versionspring boot versionjava version
4.0.14.x17
3.1.63.x17
2.3.51.x ~ 3.x1.8

🚀 快速开始

注意:如果项目中使用了 Lombok,请将 mica-auto 的依赖放在 Lombok 后面

Maven

xml
<dependency>
  <groupId>net.dreamlu</groupId>
  <artifactId>mica-auto</artifactId>
  <version>${mica-auto.version}</version>
  <scope>provided</scope>
</dependency>

Gradle >= 5.x

groovy
annotationProcessor("net.dreamlu:mica-auto:${micaAutoVersion}")

Gradle < 5.x

groovy
compileOnly "net.dreamlu:mica-auto:$micaAutoVersion"

📝 使用示例

Spring Boot starter

给类加上组合了 @Component 的注解(如 @Configuration):

java
/**
 * 自动配置
 *
 * @author l.cm
 */
@Configuration(proxyBeanMethods = false)
public class MicaAutoConfiguration {

	@Bean
	public SpringContextUtil springUtils() {
		return new SpringContextUtil();
	}

}

将自动生成 META-INF/spring.factories

text
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  net.dreamlu.mica.config.MicaAutoConfiguration

java SPI

java
package foo.bar;

import javax.annotation.processing.Processor;

@AutoService(Processor.class)
public class MyProcessor implements Processor {
    // …
}

将生成 META-INF/services/javax.annotation.processing.Processor,内容为 foo.bar.MyProcessor

🔗 参考

📄 License

LGPL v3,用户权益与 mica 一致(允许以引入不改源码的形式免费使用;修改仍需遵循 LGPL 协议)。