mica-auto
mica-auto 是 mica 生态里的一个基础组件,用来生成 Spring Boot starter 所需的元数据配置。
它基于 Annotation Processor(JDK 1.6 就有的 javac 工具,Lombok 同款技术),在编译期扫描注解并自动生成配置文件,省去手写 spring.factories 的重复劳动。
🎯 使用场景
主要用来避免 Spring Boot 主项目包与子项目/子模块包不一致、导致包扫描不到的问题:
- 自定义
spring boot starter - 多模块项目中的
子项目(不建议主项目添加mica-auto)
✨ 功能一览
- 自动生成
spring.factories、spring-devtools.properties - 生成
FeignClient到spring.factories,供 mica-cloud 完成 Feign 自动化配置 - 生成 java SPI 配置(需添加
@AutoService注解) - 使用
@AutoConfiguration时自动适配 Spring Boot 2.7+ 的AutoConfiguration.imports
注解对照表
| 注解 | 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 |
|---|---|---|
| 4.0.1 | 4.x | 17 |
| 3.1.6 | 3.x | 17 |
| 2.3.5 | 1.x ~ 3.x | 1.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.MicaAutoConfigurationjava 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。
🔗 参考
- Google Auto:https://github.com/google/auto
- spring-context-indexer:https://github.com/spring-projects/spring-framework/tree/main/spring-context-indexer
📄 License
LGPL v3,用户权益与 mica 一致(允许以引入不改源码的形式免费使用;修改仍需遵循 LGPL 协议)。