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