Criando um Singleton com Groovy 1.6
03/03/2009 00:00
0
Oi,

Bom, agora na semana passada, tivemos o release oficial do Groovy 1.6, porém como era carnaval, e nós somos brasileiros, acabou que passou meio despercebido.

Uma das coisas bem bacanas, é quando precisamos de uma classe singleton (tem gente que gosta, gente que não gosta, mas as vezes todos precisam de uma dessas).

Uma maneira clássica de implementar, é aquele velho esquema de termos um construtor privado impedindo a inicialização da classe por alguém de fora, e um método estático para resgatar uma única instância dela, algo assim:

public class Xpto {
private Xpto() {}
public static final Xpto instance = new Xpto();
}


Certo? Desta maneira a classe Xpto não permite acesso externo, e todos que necessitarem do objeto o farão recuperando o objeto instance.

Agora no Groovy 1.6 temos uma annotation que visa facilitar esse dirty job! Basta anotarmos nossa classe com @Singleton, ou seja:

@Singleton class Xpto {
}


Pronto, com esta anotação, basta fazermos a chamada para Xpto.instance que teremos uma única instância da classe na memória.

Porém desta primeira maneira, a classe Xpto sempre tem já previamente instanciado um objeto dela mesmo. Para uma outra abordagem neste contexto, onde apenas iríamos inicializar o objeto no primeiro request, teríamos que dentro do getInstance, fazer a validação (de modo sincronizado, é claro) se o objeto já foi inicializado anteriormente através de outra requisição, e caso não tenha sido, aí teríamos que fazê-lo.

Para fazer isto usando a nova anotação, teríamos este código:

@Singleton(lazy = true) class Xpto {
}


Pronto, agora basta implementar a sua!

[]s,
Tags: Snippets


Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto