• 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:


@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:

📋 Dica: fazer uso desses jar’s a partir do .m2 do maven

Seguir os passos:

  1. Botão direito sobre o projeto;
  2. Java Compiler > Annotation Processing > Factory Path;
  3. Add External JARs…
  4. Adicionar os JARs baixados
  5. Ok

Aqui o Eclipse passará a gerar, durante o build, os arquivos para o ServiceLoader por meio do @AutoService.