mica-auto 使用文档

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

功能

  1. 生成 spring.factories
  2. 生成 spring-devtools.properties
  3. 生成 FeignClientspring.factories 中,供 mica-cloud 中完成 Feign 自动化配置。
  4. 生成 java spi 配置,需要添加 @AutoService 注解。

版本说明

version spring boot version java version
3.0.1 3.x 17
2.3.2 1.x ~ 3.x 1.8

使用场景

主要是用来避免 Spring boot 主项目包同 子项目或者子模块 包不一致,避免包扫描不到的问题。

  • spring boot starter利器,自动生成 spring.factories 配置。
  • 多模块项目中的子项目(不建议主项目添加 mica-auto)。

原理

扫描对应的注解,自动生成相应的配置,支持组合注解。

注解说明

注解 生成的 spring.factories 或 spi key
@AutoContextInitializer ApplicationContextInitializer
@AutoListener ApplicationListener
@AutoRunListener SpringApplicationRunListener
@AutoEnvPostProcessor EnvironmentPostProcessor
@AutoFailureAnalyzer FailureAnalyzer
@Component EnableAutoConfiguration
@AutoIgnore 忽略,不生成到 spring.factories
@AutoService 生成 java spi 配置

依赖

maven

<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
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 内容如下:
foo.bar.MyProcessor

Spring boot starter

  • 组合有 @Component 的注解,例如:@Configuration,其他的类似 ApplicationContextInitializer 需要自行添加注解,详见 mica-auto 注解说明
/**
* 自动配置
*
* @author l.cm
*/
@Configuration(proxyBeanMethods = false)
public class MicaAutoConfiguration {

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

}
  • 将会生成 META-INF/spring.factories 文件,避免手动编写或者修改该文件,内容如下:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
net.dreamlu.mica.config.MicaAutoConfiguration

微信 vs 公众号

如梦技术

精彩内容每日推荐!!!