quarta-feira, 6 de maio de 2009

Annotation no Spring 3.0

Saiu ainda a pouco a o Milestone 3 do Spring 3.0 . Dentre os novos recursos um que saltou aos olhos é a possibilidade usar annotations do Spring na definição de annotations customizadas. Com o perdão da licensa poética, alguma coisa como "composição" ou "herança múltipla de annotations". Como um exemplo vale mais que mil palavras segue o próprio exemplo do post de divulgação do Blog do SpringSource .

@Service
@Scope("request")
@Transactional(rollbackFor=Exception.class)

@Retention(RetentionPolicy.RUNTIME)
public @interface MyService {
}

@MyService
public class RewardsService {

}

Ou seja, as annotations do spring além de serem usadas como meta-dados nos beans, agora podem ser usadas como meta-dados na definição de meta-dados de sua aplicação. Alguma coisa como meta-meta-dados ou meta2-dados(ahahahahah) . Uma possibilidade interessante que emerge é observar duplicação na ocorrência de anotattions e criar uma annotation que agrupe elas. Quem já criou um repository com Spring 2.5 sabe do que estou falando.

@Repository
@Transactional
MyReposytory

E eis que surge o refactoring de annotations :)

Outra possibilidade é a criação de annotation que além de agrupar, traduzam conceitos mais próximos do negócio em questão.

Todo essa conversa de annotation anotando annotation só me faz lembrar meu chapa Eduardo Guerra, nas nossas conversas de cafezinho, antevendo o surgimento deste padrão. Espero que ao ler este post ele não faça o seu cromossomo X falar alto e exclame um sonoro "Que foi que eu falei". E que venham o Spring 3.0 RC1.

2 comentários:

Eduardo Guerra disse...

Essa é a idéia das anotações de domínio! Você cria anotações que tem um significado para o negócio e depois "mapeia" ela para o que ela significa para infraestrutura (no caso o Spring).

Eu e o Roberto Perillo, vulgo Beto, estamos trabalhando em um framework que vai permitir o uso dessas anotações de domínio até em frameworks que não a suportam (como EJB 3, por exemplo)...

Bob "John Lennon" Perillo disse...

Fico feliz em saber que esse conceito foi adotado num framework tão respeitado e consagrado como o Spring!

Complementando o que o mestre (vulgo Eduardo Guerra) falou, o nosso framework também vai permitir que frameworks sejam feitos já permitindo esse conceito; em outras palavras, o nosso framework também vai permitir que frameworks novos, como o Spring (pelo menos nesse sentido), sejam feitos. Nós também já escrevemos um artigo sobre isso, que deve ser publicado em breve.