java SPI,每次都需要自己创建services目录,以及配置文件,google autoservice就可以帮我们省去这一步

<dependency>
	<groupId>com.google.auto.service</groupId>
	<artifactId>auto-service-annotations</artifactId>
	<version>1.1.1</version>
	<optional>true</optional>
	<scope>compile</scope>
</dependency>
<dependency>
	<groupId>com.google.auto.service</groupId>
	<artifactId>auto-service</artifactId>
	<version>1.1.1</version>
	<optional>true</optional>
	<scope>compile</scope>
</dependency>

定义接口

public interface UserService {

  String userName();
}

定义接口实现,使用AutoService注解

@AutoService(UserService.class)
public class LocalUserService implements UserService {

  @Override
  public String userName() {
    return "local user";
  }
}

@AutoService(UserService.class)
public class RemoteUserService implements UserService {

  @Override
  public String userName() {
    return "remote user";
  }
}

调用

public class Client {
  public static void main(String[] args) {
    ServiceLoader<UserService> serviceLoader = ServiceLoader.load(UserService.class);
    for (UserService userService : serviceLoader) {
      System.out.println(userService.userName());
    }
  }
}

AutoServoce和Lombok实现原理类似,通过java提供的注解处理器机制,在编译期帮助我们创建一些文件或修改文件