Criando anotações customizadas com Spring

Não é incomum que com o passar do tempo nossas classes fiquem repletas de anotações de diferentes categorias do seu framework IoC/DI, como Spring ou CDI. Estas anotações vão desde controle transacional, segurança, monitoramento e até logging. Se não tomarmos cuidado nós acabamos com muita duplicação de código de metadados e pouca legibilidade.

Para resolver isso, desde o Spring 3.0 nós podemos criar nossas próprias anotações com um significado mais próximo da nossa arquitetura ou mesmo negócio. Essa técnica de criar anotações com semântica é chamado de Stereotypes, ou do português, estereótipos.

Entender bem o conceito de estereótipos e saber estendê-lo é muito importante para arquitetos e desenvolvedores sêniors que almejam ter um melhor controle de como as classes da aplicação são registradas no container do Spring e procuram uma melhor manutenção do código a médio-longo prazo.

Criando e gerenciando objetos de terceiros com Spring e @Bean

Umas das premissas mais importantes quando trabalhamos com algum framework IoC/DI, como Spring ou CDI, é delegar a criação e o gerenciamento dos objetos para seus containers. Isso permite que nosso código seja mais flexível e menos acoplado a lógica de criação de objetos complexos ou de terceiros.

Assim como a anotação @Produces do CDI, o Spring desde sua versão 3.0 nos permite obter o mesmo comportamento através da anotação @Bean. A idéia é a mesma, criar objetos caros, complexos ou de outros frameworks e registrá-los no container para que eles possam ser injetados como dependências noutras classes do sistema.

Escrevi um artigo no blog da TriadWorks sobre o assunto com mais detalhes sobre a anotação @Bean e suas vantagens. Vale a pena a leitura e uso da prática!

Conversores e validadores acessando beans do Spring

Não é incomum ter conversores ou validadores do JSF que precisem acessar o banco de dados ou mesmo outros recursos do sistema, como um webservice, por exemplo. A verdade que esta prática é muito utilizada quando implementamos nossos entity converters. Quando trabalhamos com Spring ou CDI nós temos todo o poder de um container de IoC/DI, o que nos possibilita injetar beans gerenciados em nossas classes ou mesmo managed beans. Contudo a especificação do JSF 2.x ainda não tem um suporte decente de DI para conversores, validadores e alguns outros componentes internos do framework.

Para contornar essa limitação, podemos gerenciar os conversores do JSF com o container do Spring ou CDI. Dessa forma ganhamos a possibilidade de injetar qualquer bean dentro dos conversores e aplicar qualquer recurso extra do container, segurança, caching, controle transacional etc. Para saber mais detalhes sobre como injetar beans em seus validadores ou conversores, não deixe de ler o último post de 2014 no blog dos desenvolvedores da TriadWorks.