文档章节

谈谈spring-boot自动生成spring-configuration-metadata.json原理

my_juke
 my_juke
发布于 05/03 07:59
字数 331
阅读 25
收藏 0

JDK6提供了一个可以在编译阶断对代码进行额外补充操作的一个功能

该功能有以下几个步骤: 首先需要继承javax.annotation.processing.AbstractProcessor类。

@SupportedAnnotationTypes({"*"})
public class MyProcessor extends AbstractProcessor {

    @Override
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
        System.out.println("start process");
        annotations.forEach(s->{
            System.out.println(s);
            Set<? extends Element> set = roundEnv.getElementsAnnotatedWith(s);
            set.forEach(System.out::println);
        });
        return true;
    }

    @Override
    public Set<String> getSupportedAnnotationTypes() {
        return super.getSupportedAnnotationTypes();
    }
}

然后在class下添加META-INF/services目录,里面添加一个javax.annotation.processing.Processor文件,类容为上面的实现类: com.github.liuax.mybatis.batch.autoconfigure.MyProcessor 注意编译时需要传参:<compilerArgument>-proc:none</compilerArgument>。理由:是因为编译该工程时,该处理类还未编译。 新建一个工程,依赖上面打包好的JAR包。运行编译可以看到效果:

[INFO] Compiling 3 source files to Z:\ideaProject\mybatis-batch-parent\mybatis-batch-starter\target\classes
start process
javax.xml.ws.ServiceMode
test.Test2
javax.annotation.Generated
test.Test1
test.Test3
start process
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS

再来看看spring-boot是怎么生成元素据提示信息的

需要依赖一个JAR包,该JAR包含一个继承javax.annotation.processing.AbstractProcesso的实现类。

        <!-- @ConfigurationProperties annotation processing (metadata for IDEs) -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <version>2.0.1.RELEASE</version>
            <optional>true</optional>
        </dependency>

打开原码结构看一下:

© 著作权归作者所有

my_juke
粉丝 4
博文 34
码字总数 22261
作品 0
深圳
私信 提问
自定义Spring Boot Starter

在使用Spring Boot开发的时候,我们会用到各种各样的Spring-boot-Starter,不过那些Starter都是常用的,在不同的公司,因不同的业务场景,内部的库也不同,有时需要做一个自己的starter,方便...

Real_man
2018/08/16
0
0
用Kotlin在IntelliJ Idea中无法生成 spring-configuration-metadata.json 文件

问题描述 在百度搜索关键词,搜索到了 Stack Overflow 有相关问题 spring-configuration-metadata.json file is not generated in IntelliJ Idea for Kotlin @ConfigurationProperties class ......

JerrySimple
2018/10/12
604
0
SpringBoot系列三:SpringBoot自定义Starter

原文出处:晴枫 在前面两章 SpringBoot入门 、SpringBoot自动配置原理 的学习后,我们对如何创建一个 SpringBoot 项目、SpringBoot 的运行原理以及自动配置等都有了一定的了解。如果我们系统...

晴枫
2018/11/21
0
0
Spring Boot 必备技能之Starter自定义

本文摘自于《Spring Cloud微服务 入门 实战与进阶》一书。 Spring Boot的方便体现在简化了很多繁琐的配置,对开发人员来说是一个福音,通过引入各种Spring Boot Starter包可以快速的搭建出一...

尹吉欢
08/13
0
0
创建自己的Spring Boot starter

Spring Boot starter 的组件 autoconfigure starter autoconfigure模块 包含自动配置的代码 starter模块 包含autoconfigure模块所依赖的包以及通用的包 命名 不要以 spring-boot 开头 xxx-sp...

666B
2017/10/25
67
0

没有更多内容

加载失败,请刷新页面

加载更多

Centos7 安装zabbix-agent

rpm -i https://repo.zabbix.com/zabbix/4.2/rhel/6/x86_64/zabbix-release-4.2-2.el6.noarch.rpm 可以到https://repo.zabbix.com/zabbix找到对应的版本 yum install zabbix-agent -y 出现E......

abowu
昨天
8
0
文本编辑器GNU nano 4.4 发布

GNU nano 4.4 "Hagelslag" 更新日志: 启动时,光标可以放在第一个或最后一个出现位置 字符串前面带有+/string 或 +?string的字符串。 发生自动硬包装时((--breaklonglines),任何前导引号...

linuxCool
昨天
7
0
你知道字节序吗

字节序 最近在调一个自定义报文的接口时,本来以为挺简单的,发现踩了好几个坑,其中一个比较“刻骨铭心”的问题就是数据的字节序问题。 背景 自定义报文,调用接口,服务端报文解析失败 iO...

杭城小刘
昨天
3
0
设计模式之依赖倒置原则

方法

东风破2019
昨天
6
0
关于如何通过模拟器完成模拟步数提升傻瓜式解决方案(囧)

因为对Android开发不太了解,也没去问朋友所以误打误撞找到的一个提升步数的解决方案,当然只是针对某安APP运动RUN的解决方式吧。 对Android不太了解,所以找了很多的解决方案来看看能不能破...

华山猛男
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部