Logo pt.removalsclassifieds.com

Diferença entre injeção de construtor e injeção de setter (com tabela)

Índice:

Anonim

Quando a resolução de dependência é feita por um agente externo em vez da própria classe, isso é conhecido como injeção de dependência. Existem duas maneiras padrão de injeção de dependência que são suportadas no framework Spring, por meio de um argumento do construtor ou por meio do método setter. O primeiro tipo de injeção de dependência é conhecido como injeção de construtor e o último é conhecido como injeção de setter. Ambos os métodos são usados ​​para finalidades diferentes e têm suas próprias vantagens e desvantagens.

Injeção de construtor vs injeção de setter

A diferença entre a injeção de construtor e a injeção de Setter é que a injeção de construtor usa o construtor e, por outro lado, a injeção de setter usa métodos de setter para injetar dependência. Esses dois tipos de formas de injeção diferem um do outro com base em vários parâmetros, como segurança, legibilidade, suporte à imutabilidade e assim por diante.

A injeção de construtor é um tipo de injeção de dependência no framework Spring que usa um construtor para injetar dependência. As dependências necessárias para qualquer uma das classes são especificadas como os parâmetros do construtor dessa classe específica. A injeção de construtor não permite que o desenvolvedor construa qualquer objeto a menos que todas as dependências estejam prontas e, portanto, garante uma injeção de dependência bem-sucedida.

A injeção de setter é um tipo de injeção de dependência no framework Spring que usa métodos setter para injetar dependência. Ele possui métodos setter da forma setXXX () onde XXX denota uma dependência que injeta os objetos dependentes no cliente. Essa maneira de resolver a dependência é muito comum no framework Spring.

Tabela de comparação entre injeção de construtor e injeção de setter

Parâmetros de comparação

Injeção de construtor

Injeção Setter

Dependência injetada Ele usa um construtor. Ele usa métodos setter.
Legibilidade Não é muito legível em comparação com o setter. É mais legível.
Substituir propriedade Não pode substituir a dependência. Pode substituir certas dependências.
Alterar Sempre cria uma nova instância de bean. Ele não cria nenhuma nova instância de bean.
Imutabilidade Ele suporta imutabilidade. Não suporta.

O que é injeção de construtor?

A injeção de construtor é uma das maneiras padrão de resolver a dependência dentro do framework Spring, que define estaticamente a lista de dependências necessárias para as classes, atribuindo-as como parâmetros ao construtor da classe. Todas as classes que requerem dependência devem ter um construtor público dentro delas, que leva uma instância como o argumento do construtor, e esse construtor deve ser necessariamente o único construtor público dentro dessa classe.

Se houver necessidade de mais de uma dependência, os argumentos adicionais devem ser adicionados ao mesmo construtor. Para garantir que a dependência seja injetada completamente, um único princípio de responsabilidade deve ser seguido, que afirma que os membros devem fazer apenas uma coisa. O construtor deve ser mantido livre de qualquer outra lógica para tornar o construtor das classes mais rápido e confiável.

Um fato importante da injeção de construtor é que os objetos não serão construídos a menos que todas as dependências estejam prontas. Como ele cria novas instâncias toda vez que o construtor está sendo chamado, a substituição não é possível nele. A injeção de construtor é basicamente utilizada nos casos em que existe a necessidade de criar objetos com todas as dependências. Esta é a maneira mais geral e fácil de implementar dependências corretamente.

O que é injeção Setter?

A injeção de setter é uma das maneiras padrão de resolver dependências no framework Spring, que usa os métodos setter para resolver as dependências. Os métodos setter têm o formato setXXX (), onde XXX especifica a dependência que precisa ser injetada. Nesse tipo de método de injeção, primeiro é criado o objeto e, posteriormente, injetada a dependência. Para configurar o Spring, são usados ​​arquivos XML e, portanto, a legibilidade é uma grande preocupação.

Como os métodos setter têm uma forma especificada de nomes de método, ele aumenta a legibilidade de várias maneiras. Quando há necessidade de injetar um número maior de dependências, o tipo de injeção setter é muito favorecido e preferido em relação a outros tipos de métodos de injeção. Além disso, usando a injeção de setter, os desenvolvedores podem facilmente substituir e alterar os valores porque isso não cria uma nova instância de bean todas as vezes. A única desvantagem da injeção de setter é que ela não garante a injeção de dependência completa.

Não há garantia se um determinado objeto tem dependência injetada ou não. Em outras palavras, significa que pode haver um objeto com dependência incompleta. A injeção de setter é a forma mais flexível e comum de implementar a injeção de dependência.

Principais diferenças entre injeção de construtor e injeção de setter

Conclusão

O resultado final é que as duas maneiras de injetar dependências, seja injeção de construtor ou injeção de setter, têm seus próprios prós e contras. Além disso, o Spring não se abstém de usar ninguém além do avaliador. Eles são livres para usar injeção de construtor e injeção de setter em um arquivo de configuração Spring. O importante a se ter em mente ao injetar dependência é usar a injeção de construtor quando houver uma necessidade obrigatória de criar objetos com todas as dependências e usar a injeção de setter quando o número de dependências for maior ou se houver necessidade de melhor legibilidade.

Referências

  1. https://digitalcommons.calpoly.edu/csse_fac/34/
  2. https://books.google.com/books?hl=en&lr=&id=InfRDwAAQBAJ&oi=fnd&pg=PA63&dq=constructor+injection&ots=Hon_bCw-Kv&sig=VdsD_S0lCfP3D8idI8q4F6RnhoE

Diferença entre injeção de construtor e injeção de setter (com tabela)