Inicializacao tardia

4 respostas
masreis

Qual o problema de utilizarmos essa abordagem a seguir?

private Fachada f;

public Fachada getFachada() {

if(f == null) {

f = new Fachada();

}

}

Nao utilizo Spring e essas coisas, mas imagino que tenha uma maneira mais moderna de resolver esse problema de inicializacao.

4 Respostas

Andre_Fonseca

oi,

desculpe cara, eu não entendi a sua dúvida, o que você está fazendo é criar o objeto apenas quando ele não existe

inicialização tardia - no meu ponto de vista - é você criar o objeto apenas no momento anterior ao que ele for necessário

um suposto caso de inicialização tardia é o famoso lazy initialization do hibernate… ( neste caso o tabela só será mapeada pelo objeto quando seu uso for necessário )

um exemplo de código pode ser visto na wikipedia

import java.util.*;
 
public class Fruit
{
    private static final Map<String,Fruit> types = new HashMap<String,Fruit>();
    private final String type;
 
    // using a private constructor to force use of the factory method.
    private Fruit(String type) {
      this.type = type;
    }
 
    /**
     * Lazy Factory method, gets the Fruit instance associated with a
     * certain type. Instantiates new ones as needed.
     * @param type Any string that describes a fruit type, e.g. "apple"
     * @return The Fruit instance associated with that type.
     */
    public static synchronized Fruit getFruit(String type) {
      if(!types.containsKey(type))
        types.put(type, new Fruit(type)); // Lazy initialization
      return types.get(type);
    }
}
masreis

Minha questão é no seguinte contexto: Usar injeção de dependência é melhor?
Além desse recurso (ID), que outros temos nesse sentigo?
Tem dado muito trabalho e não parece muito eficiente, principalmente para atualizações.

Ouvi alguem dizer que existem outras alternativas. Alguém sabe do que se trata?!?!?!

Alexandre_Saudate

Injeção de dependências não precisa, necessariamente, de um contêiner. Você pode usar até o construtor do objeto para passar a dependência para ele. Ou seja, no seu caso, você não teria o f == null, mas sim, retornaria direto. Só teria que ter o cuidado de sempre passar uma dependência válida pelo construtor.

[]´s

Alexandre_Saudate

.

Criado 12 de maio de 2010
Ultima resposta 12 de mai. de 2010
Respostas 4
Participantes 3