Nesse post, veremos como criar bibliotecas Plug-And-Play usando a funcionalidade de Auto Configuração do Spring Boot, assim você pode criar suas próprias bibliotecas configuráveis e de forma não intrusiva nos seus projetos. .

Você pode acessar o código usado nesse post no link

Nosso projeto será um jar simples, contendo a configuração de um Aspect, que irá interceptar todos os métodos anotados com @Profile, esse aspect sera responsavel por contar o tempo de execução de cada método interceptado.Não entrarei no código do Aspect, por não fazer parte do escopo desse post.

A configuração inicial deve ser feita como um projeto padrão Spring Boot, veja a classe de configuração a seguir

@Configuration
@EnableAspectJAutoProxy
@ComponentScan("me.efraimgentil.profiler")
@EnableConfigurationProperties(ProfilerProperties.class)
public class ProfilerAutoConfiguration {
}

Vamos explicar as anotações aqui usadas

  • @Configuration - Sinalizamos que essa é uma classe de configuração do Spring
  • @EnableAspectJAutoProxy - Abilitamos a funcionalidade de aspectos para os componentes do Spring
  • @ComponentScan - Sinalizamos que pacotes serão escaneados para identificar as classes marcadas como Bean's do Spring
  • @EnableConfigurationProperties - Sinalizamos as classes que serão preenchidas com as propriedades contidas nos arquivos .properties ou .yml

Até aqui, nada diferente do comum usado em uma aplicação Spring Boot, vejamos a classe ProfilerProperties, que será usada para customizar nossa biblioteca, essa classe basicamente é um POJO, mas que será preenchida pelo Spring

@ConfigurationProperties(prefix = "profiler")
public class ProfilerProperties implements Serializable {

    private boolean printToSout;
    private boolean logParameters;
    
    //... Gets & Sets Etc..

}

Com a anotação @ConfigurationProperties dizemos qual será o prefixo que o Spring tomará como base para preencher as propriedades da classe

    //profiler.printToSout=true

    private boolean printToSout;// valor true sera preenchido

    //profiler.printToSout=false

    private boolean logParameters; // valor false sera preenchido

Agora a parte importante, vamos adicionar um arquivo chamado spring.factories na pasta META-INF do projeto

|---src
    |---main
        |---java
        |---resources
            |---META-INF
                - spring.factories

No arquivo spring.factores iremos adicionar a configuração para que o Spring possa reconhecer esse Jar como um componente auto configurável

org.springframework.boot.autoconfigure.EnableAutoConfiguration=me.efraimgentil.profiler.config.ProfilerAutoConfiguration

Podemos adicionar quantas classes de configuração forem necessárias, como valor da propriedade org.springframework.boot.autoconfigure.EnableAutoConfiguration.

Com isso, basta empacotar-mos nosso .jar e distribuir para as aplicações. Dessa forma temos uma biblioteca Plug-And-Play, basta adicionar o jar na aplicação, e o Spring se encarregará do resto