Qual o proposito de se usar injeção de dependecias com Spring?

6 respostas
W

Ao meu entender injeção de dependencia é quando eu defino na minha aplicação momentos em que eu vou precisar de um objeto e simplesmente eu não crio esse objeto com new mas configuro o spring para criar esse objeto para mim. Ai eu fiquei pensativo se realmente vale apena fazer toda uma configuração do spring para não ter que simplesmente escrever new [AlgumObjeto] em meu codigo. Imagino que não seja só isso, alguem pode me esclarecer melhor esse assunto?

6 Respostas

R

Eu comecei no java e já parti usando o Spring FrameWork, não pq eu quis, mas participei de um projeto que já usava. No inicio, eu não conseguia entender o motivo de usar Spring, mas também eu mal sabia java na época.

Dai com o tempo passei a entender, muito por acabar criando outros projetos sem o uso do Spring.

Hj eu aconselho, se vai criar um projeto, use Spring ou outro framework de injeção de dependencias que vc preferir, vale a pena.

Como vc citou, não precisa ficar fazendo new a toda hora, o Spring faz isso por trás dos panos para vc. Mas o Spring vai além disso, já tem algumas API’s implementadas para vc também, como JMS, JavaMail, TimerTask e Quartz para agendamento de tarefas, entre outras.

Isso tudo pode ser configurado no Spring e não precisa então ficar criando varias classes e métodos de códigos.

Mas uma dica, crie uma aplicação sem Spring e outra com Spring, e veja por si só se existem vantagens ou não.

No inicio vai parecer mais complicado, pq precisa configurar o Spring, mas depois que se acostuma, fica tranquilo.

W

Valeu pela dica. Você conhece algum material bom com exemplo de spring 3 com jsf 2 e hibernate? Nem que seja um simples CRUD.

R

Bah, dai vou ficar te devendo, não lembro de nada no momento.

M

wagne23 use o SPRING ! Ele vai muito alem de injecao de dependencias… vc vai ver com o tempo. Sobre a criacao de objetos, o spring te da a opcao de usar padroes, tipo singleton ou prototype, além de desacoplar seu projeto

P

wagne23, o spring é muito mais que só injeção de dependencia, e vale muito a pena utilizar para não ter que implementar um monte de funcionalidade como , transação, email, segurança, … e alem de ter fornecer varios outras funcionalidade…

Mas a sua pergunta é sobre injeção de dependendia, quando eu começei a trabalhar com spring realmente eu não conseguia visualizar a grande vantagem de utilizar ,
Mas com o tempo fui vendo a grande vantagem.

o fato interresante é o baixo acoplamento de suas classes, tão baixo que a sua classe muitas vezes nem sabe qual implementação de outras classes irá utilizar
ex:

class Logic {
@AutoWired
private UsuarioDAO usuarioDAO;
//get and sets
public void cria(Usuario u){
usuarioDAO.save(u);
}

}

public interface UsuarioDAO{ void save(Usuario u);}

está classe acima não sabe qual implementação do usuarioDAO que vai utilizar, simplemente vai utilizar qualquer implementação que o spring utilizar, está é a vantagem da injeção de idenpendecia, uma classe será injetada pelo spring.

se não estivesse utilizando o spring para injeção (@Autoried) ficaria com muito + acoplamento/amarração com outras classes
ex:

class Logic {
@AutoWired
private UsuarioDAO usuarioDAO;
//get and sets
Logic (){
this.usuarioDAO = new JDBCUsuarioDAO();
//ou poderia ser this.usuarioDAO = new HibernateUsuarioDAO();
//alto acoplamento
}
public void cria(Usuario u){
usuarioDAO.save(u);
}

}

public interface UsuarioDAO{ void save(Usuario u);}

com isso eu não conseguiria utilizar teste de unidades, por exemplo pq esta classe tem um forte acoplamento com a implementação da interface usuarioDAO…

O injeção de dependencia deixa suas classes limpas, sem referencias com outras classes deixando o seu projeto mais facil para manutenção, já que eu posso trocar o fluxo do sistema sem ter que alterar uma sequer classe.

Y

Injecao de dependencia eh simplesmente passar um objeto como parametro para outro ao inves deste outro por conta propria ir procurá-lo ou instancia-lo. Voce pode fazer isso de N maneiras, inclusive usando o new antes de injetar o objeto criado no outro.

O spring nao vai ter muita utilidade nas tuas classes de negocio, pelo menos nao tem pra mim. A grande vantagem dele está naquilo que envolve a sua regra. Por exemplo, usando JSF voce pode configura-lo para que ele fique responsavel por instanciar os manageBeans, injetar os services e repositorios neles, instanciar uma sessionFactory ao subir a aplicacao, abrir uma session do hibernate no inicio do request e fecha-la depois de renderizar a resposta, criar uma transacao quando um metodo é chamado e dar o commit ao ser concluido ou o rollback caso haja alguma excecao, entre outras coisas. Tudo isso sem que voce tenha que, por conta propria, ficar criando e destruindo objeto por objeto destes que eu citei como exemplo e sem que precise ficar inicando e commitando transacao espalhando try/catch pra todo lado.

Ou seja, ele é capaz de criar para voce um serviço com todos os recursos necessários para a sua operação sem que voce precise manualmente sair instanciando todo mundo e se preocupando com o ciclo de vida desses recursos.

Isso so pra falar da parte de Injecao de Dependencia.

Criado 9 de outubro de 2010
Ultima resposta 12 de out. de 2010
Respostas 6
Participantes 5