前言
最近半年一直在做微服务开发,所使用的框架中用到了一些技术是之前未曾见过的,所以趁不忙之际赶紧学习一下,记录下来。我们框架中用到了java的apt和spi机制,所以在此记录一下两个概念的基本用法和使用场景。
Java APT
APT(Annotation Process Tool),注解处理工具。apt被设计为操作java源文件,也就是编译时对注解进行扫描并处理,按照一定的规则,生成相应的java文件。在java8之前,apt相关的源码(com.sun.mirror.apt.*)都在tools.jar里,如果要使用需要将tools.jar加到Libraries下。java8开始,相关代码移到了javax.annotation.processing和javax.lang.model下,相关的类也发生了变化,使用更加方便。下面说下apt在我们微服务框架中的使用场景。
@AutoService注解,可能做Android开发的都用过,这个注解是google的一个开源jar包中的注解(https://github.com/google/auto),用于生成java SPI描述文件,而我们框架手动实现了一个@AutoService自定义注解,实现大致过程如下:
1、先创建一个自定义注解,@Retention(RetentionPolicy.SOURCE)说明这个注解只在源码阶段生效,编译后就不再生效了。
import java.lang.annotation.*;
/**
* An annotation for service providers as described in {@link java.util.ServiceLoader}. The {@link
* AutoServiceProcessor} generates the configuration files which
* allows service providers to be loaded with {@link java.util.ServiceLoader#load(Class)}.
*
* <p>Service providers assert that they conform to the service provider specification.
* Specifically, they must:
*
* <ul>
* <li>be a non-inner, non-anonymous, concrete class
* <li>have a publicly accessible no-arg constructor
* <li>implement the interface type returned by {@code value()}
* </ul>
*
* @author google
*/
@Documented
@Retention(RetentionPolicy.SOURCE)
@Target(ElementType.TYPE)
public @interface AutoService {
/**
* Returns