- O que é Java ServiceLoader?
- Como usar o @AutoService?
- Como integrar com o (build) processador de anotações do Eclipse?
Java ServiceLoader
É um provedor simples de serviços disponibilizado pela classe java.util.ServiceLoader. As interfaces devem ser registradas como arquivos dentro da pasta META-INF/services/ e as implementações registradas no conteúdo dos arquivos.
Ver mais:
- http://www.oracle.com/technetwork/articles/javase/extensible-137159.html
- http://docs.oracle.com/javase/6/docs/api/java/util/ServiceLoader.html
@AutoService (google/auto)
Gera automaticamente os arquivos necessários para o java.util.ServiceLoader funcionar.
<dependency>
<groupId>com.google.auto.service</groupId>
<artifactId>auto-service</artifactId>
<version>1.0-rc2</version>
<optional>true</optional>
</dependency>
O código de exemplo abaixo:
package com.demo;
public interface ControllerHandlerFactory {
//...
}
package com.demo;
@AutoService(ControllerHandlerFactory.class)
public class DefaultControllerHandlerFactory implements ControllerHandlerFactory {
//...
}
package com.demo;
@AutoService(ControllerHandlerFactory.class)
public class GuiceControllerHandlerFactory implements ControllerHandlerFactory {
//...
}
Gera o arquivo: /META-INF/services/com.demo.ControllerHandlerFactory
Contendo as linhas:
- com.demo.DefaultControllerHandlerFactory
- com.demo.GuiceControllerHandlerFactory
Ver mais: https://github.com/google/auto/tree/master/service
Eclipse IDE - Integração com o @AutoService
Realizar o download dos JARs:
- https://mvnrepository.com/artifact/com.google.auto.service/auto-service
- https://mvnrepository.com/artifact/com.google.code.findbugs/jsr305
- https://mvnrepository.com/artifact/com.google.guava/guava
- https://mvnrepository.com/artifact/com.google.auto/auto-common
📋 Dica: fazer uso desses jar’s a partir do .m2 do maven
Seguir os passos:
- Botão direito sobre o projeto;
- Java Compiler > Annotation Processing > Factory Path;
- Add External JARs…
- Adicionar os JARs baixados
- Ok
Aqui o Eclipse passará a gerar, durante o build, os arquivos para o ServiceLoader por meio do @AutoService.