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?
Qual o proposito de se usar injeção de dependecias com Spring?
6 Respostas
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.
Valeu pela dica. Você conhece algum material bom com exemplo de spring 3 com jsf 2 e hibernate? Nem que seja um simples CRUD.
Bah, dai vou ficar te devendo, não lembro de nada no momento.
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
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.
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.