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提供的注解处理器机制,在编译期帮助我们创建一些文件或修改文件