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,