O que é injeção de dependência? - Saiba como implementar injeção de dependência



Este artigo sobre O que é injeção de dependência é um guia abrangente para injeção de dependência com prática no Spring Boot.

Em um mundo onde trabalhamos diariamente com linguagens de programação, todos nós tendemos a buscar métodos e truques para facilitar nossas vidas. Bem, Dependency Injection é uma dessas técnicas que visa ajudar o desenvolvedor de código facilmente, fornecendo dependências de outro objeto. Neste artigo sobre O que é injeção de dependência, irei ajudá-lo a entender essa técnica em detalhes.

Os seguintes tópicos serão abordados neste artigo:





Então, vamos começar com este artigo.

O que é injeção de dependência?

Injeção de dependência é a capacidade de um objeto de fornecer dependências de outro objeto.



Agora, tenho certeza de que você pode não ter entendido nada pela definição técnica acima. Então, deixe-me esclarecer a confusão para você.

Quando você ouve o termo dependência, o que vem à sua mente?

Obviamente, algo contando com outra coisa para suporte certo?



Bem, isso é o mesmo, no caso da programação também.

ir para c ++

Dependência em programação é uma abordagem em que uma classe usa funcionalidades específicas de outra classe. Então, por exemplo, se você considerar duas classes A e B, e dizer que a classe A usa funcionalidades da classe B, então está implícito que a classe A tem uma dependência da classe B. Agora, se você está codificando em Java, você deve saber que você tem paracrie uma instância da classe B antes que os objetos sejam usados ​​pela classe A.

Tipos de classes - O que é injeção de dependência - Edureka

Então, se eu tenho que definir agora a injeção de dependência para você, o processo de criar um objeto para alguma outra classe e deixar a classe diretamente usando a dependência é chamado de injeção de dependência. Tem principalmente três classes envolvidas:

  • Classe de cliente: Esta é a classe dependente e depende da classe Service.

  • Classe de serviço: Esta classe fornece um serviço para a classe cliente.

  • Classe do injetor: Esta classe é responsável por injetar o objeto da classe de serviço na classe do cliente

Agora que você entendeu o que é injeção de dependência, deixe-me levá-lo a seguir o princípio no qual a injeção de dependência se baseia.

Inversão de controle

Como mencionei acima, a Inversão de Controle é um princípio baseado no qual a Injeção de Dependência é feita. Além disso, como o nome sugere, a Inversão de Controle é basicamente usada para inverter diferentes tipos de responsabilidades adicionais de uma classe, em vez da responsabilidade principal.

Se eu tiver que explicar em termos mais simples, considere um exemplo em que você tem a habilidade de cozinhar. De acordo com o princípio IoC, você pode inverter o controle, então, em vez de cozinhar alimentos, você pode apenas fazer o pedido diretamente de fora, onde receberá comida à sua porta. Assim, o processo de entrega de alimentos à sua porta é chamado de Inversão de Controle.

Você não precisa cozinhar sozinho, em vez disso, você pode pedir a comida e deixar um executivo de entrega entregar a comida para você. Desta forma, você não precisa se preocupar com as responsabilidades adicionais e apenas se concentrar no trabalho principal.

Agora, que você conhece o princípio por trás da injeção de dependência, deixe-me mostrar os tipos de injeção de dependência.

Tipos de injeção de dependência

Existem basicamente três tipos de injeção de dependência:

  • Injeção de construtor: Nesse tipo de injeção, o injetor fornece dependência por meio do construtor da classe do cliente.

  • Injeção de Setter / Injeção de Propriedade: Nesse tipo de injeção, o método injetor injeta a dependência ao método setter exposto pelo cliente.

  • Injeção de interface: Neste tipo de injeção, o injetor usa Interface para fornecer dependência para a classe cliente. Os clientes devem implementar uma interface que irá expor ummétodo setterqualaceita a dependência.

Até agora, espero que você tenha entendido o fato de que a injeção de dependência é responsável por criar objetos, entenda quais classes exigem esses objetos e, finalmente, forneça esses objetos a essas classes. Portanto, nessa observação, vamos examinar os benefícios da injeção de dependência.

Benefícios da injeção de dependência

Antes de listar os benefícios da injeção de dependência, deixe-me explicar a necessidade dessa injeção no nível da indústria, para ajudá-lo a entender melhor os benefícios.

Considere um cenário em que você tem uma Classe de Email, cuja única responsabilidade é cuidar dos emails recebidos. Agora, essa classe terá objetos como “Para o endereço de email”, “Do endereço de email”, “Assunto e o corpo do email”.

Agora, se a empresa deseja salvar mensagens de texto e áudio, você acha que essa turma pode salvar a mensagem?

Então, a resposta é não?

Isso porque a classe de e-mail não pode lidar com os parâmetros das mensagens de texto e áudio. Nesses casos, você terá que recriar a classe. Agora, recriar a classe é um trabalho bastante complicado, especialmente se você tiver que fazê-lo regularmente. Em vez disso, se você usar injeção de dependência, você pode alterar os objetos em tempo de execução. Portanto, desta forma, você não precisa recriar a classe, o que o ajuda ainda mais de várias maneiras.

Portanto, se eu tiver que resumir os benefícios da injeção de dependência, os seguintes são os benefícios:

Tudo bem, agora que você conhece os benefícios da injeção de dependência, vamos seguir em frente e ver como implementar a injeção de dependência usando Spring Boot.

Como implementar DI usando Spring Boot?

Passo 1: Abre o teu IDE Eclipse e criar um Aplicativo Spring Boot clicando com o botão direito e escolhendo Projeto Spring Starter . Em seguida, mencione o nome do projeto e clique em Terminar .

Para obter o Spring Starter Project, você deve instalar o Spring Tool Suite do Eclipse Marketplace. Caso você não tenha o Spring Too Suite instalado, consulte meu artigo sobre .

Você verá automaticamente que um arquivo de aplicativo é criado conforme abaixo.

Passo 2: Em seguida, crie uma classe no mesmo pacote. Para fazer isso, clique com o botão direito no arquivo -> escolha Classe e mencionar o nome da classe. Então clique em Terminar . Isso criará um Classe Arquivo. Aqui eu criei uma classe Clientes. Consulte abaixo.

analisar string para data java

Etapa 3: Depois disso, vamos inserir algumas propriedades para a classe. Então, digamos, incluímos ID do cliente, nome do cliente e Nome do curso. Mencione o código abaixo.

pacote com.example.demo // nome do pacote classe pública Clientes {private int custid private String custname private String coursename}

Etapa 3.1: Assim que terminar com isso, você deve gerar métodos Getter e Setter para essas propriedades. Para isso, selecione essas propriedades e clique com o botão direito. Então escolha Fonte -> Gerar métodos Getter e Setter.

Seu código até agora deve ser o seguinte:

package com.example.demo public class Clientes {private int custid private String custname private String coursename public int getCustid () {return custid} public void setCustid (int custid) {this.custid = custid} public String getCustname () {return custname } public void setCustname (String custname) {this.custname = custname} public String getCoursename () {return coursename} public void setCoursename (String coursename) {this.custname = coursename}}

Agora, considere um cenário em que você precisa criar um objeto para Clientes e não quer fazer isso manualmente. Nesse cenário, você terá que usar a injeção de dependência, para obter os objetos sempre que necessário.

Então, a seguir, vamos ver como podemos conseguir o mesmo.

Passo 4: Primeiro, mude o linha de corrida no arquivo de classe de aplicativo para o seguinte:

ConfigurableApplicationContext context = SpringApplication.run (DemoApplication.class, args)

Observação: se você receber um erro, importe o seguinte:

import org.springframework.boot.SpringApplication import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.context.ConfigurableApplicationContext

Esta linha de código acima retornará um objeto no momento da execução. Agora adicione o seguinte código ao arquivo do aplicativo.

clientes c = context.getBean (customers.class)

A linha acima dirá ao compilador para retornar um objeto da classe do cliente. Consulte abaixo.

Etapa 4.1: Agora, para verificar se está funcionando ou não, você pode voltar para a classe Cliente e adicione um método da seguinte forma:

public void display () {System.out.println ('Objeto retornado com sucesso')}

Este método exibirá uma saída “Object Returned Successfully” na execução bem-sucedida.

Etapa 4.2: Em seguida, você deve voltar ao arquivo do aplicativo e mencionar o seguinte:

c.display ()

Com isso, você está chamando o objeto da classe Clientes com uma referência do método de exibição. Consulte a imagem abaixo para o código da classe Application até agora:

como executar php no windows 10

Agora, se você executar o projeto, verá um exceção de Nenhum bean de qualificação do tipo . Isso ocorre porque a classe do cliente que você definiu não é um Spring Bean, ou seja, não é um objeto Spring. Consulte abaixo.

Etapa 4.3: Portanto, para informar isso ao Spring Container, precisamos de um objeto da classe do cliente. Para fazer isso, você precisa mencionar o @Component annotation , na classe Cliente. O código na classe Clientes deve ser o seguinte:

pacote com.example.demo import org.springframework.stereotype.Component @Component public class Clientes {private int custid private String custname private String coursename public int getCustid () {return custid} public void setCustid (int custid) {this.custid = custid} public String getCustname () {return custname} public void setCustname (String custname) {this.custname = custname} public String getCoursename () {return coursename} public void setCoursename (String coursename) {this.coursename = coursename} public void display () {System.out.println ('Objeto retornado com sucesso')}}

Então, quando você menciona clientes c = context.getBean (customers.class) o compilador verificará se há um bean de cliente disponível no contêiner ou não.

Se o Bean estiver disponível, a estrutura Spring está injetando o objeto do cliente em seu aplicativo. Então, basicamente, esse objeto é criado pelo framework Spring, que pode ser usado posteriormente na aplicação.

Portanto, se eu executar este projeto agora, você verá uma saída de que Object Returned Successfully. Consulte abaixo.

Basicamente, é assim que você pode implementar a injeção de dependência.

Exemplo: injeção de dependência usando anotação autowired

Espero que você tenha entendido como a injeção de dependência funciona no Spring Boot. Agora, vamos estender este exemplo e ver melhor como uma classe dependente da outra classe usou as funcionalidades dessa classe no Spring Boot.

Passo 1: Crie um novo arquivo de classe , por novamente clicando com o botão direito no pacote e escolhendo Novo -> Classe. Agora, mencione o nome da turma conforme abaixo e clique em Terminar.

Passo 2: A seguir, vamos inserir algumas propriedades para a classe. Então, digamos, incluímos TechID, Techname. Mencione o código abaixo.

pacote com.example.demo public class Technologies {private int techid private String techname}

Etapa 2.1: Depois de fazer isso, gere Métodos getter e setter para essas propriedades clicando com o botão direito no arquivo e, em seguida, escolha Fonte -> Gerar métodos Getter e Setter.

Etapa 3: Agora, digamos, temos que criar um método que imprima “ Bem sucedido “. Para fazer isso, mencione o código:

public void tech () {System.out.println ('Bem-sucedido')}

Seu código até agora deve ser assim:

pacote com.example.demo public class Technologies {private int techid private String techname public int getTechid () {return techid} public void setTechid (int techid) {this.techid = techid} public String getTechname () {return techname} public void setTechname (String techname) {this.techname = techname} public void tech () {System.out.println ('Bem-sucedido')}}

Passo 4: Agora, para chamar o método tech () no classe de clientes , você deve criar um objeto da classe de tecnologias. Portanto, mencione a seguinte linha de código na classe de clientes:

detalhes técnicos de tecnologias privadas

Etapa 4.1: Depois de fazer isso, gere Métodos getter e setter para essas propriedades por clicando com o botão direito no arquivo e então escolher Fonte -> Gerar métodos Getter e Setter.

Etapa 5: Em seguida, para usar o método tech () , você tem que mencionar techdetail.tech () debaixo de método de exibição da classe de clientes . Além disso, para se certificar de que o objeto techdetail é uma referência instanciada @Component annotation é o Aula de tecnologias. Consulte abaixo.

Agora, ao executar este projeto, você verá um Null Pointer Exception . Isso ocorre porque agora o A classe de cliente é dependente da classe de tecnologias e ainda não conhece a existência da classe de tecnologias .

Portanto, para permitir que o Cliente reconheça a classe Tecnologias, você deve inserir o @Autowired annotation na classe Clientes. Seu código final da classe de clientes deve ser o seguinte:

pacote com.example.demo import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Component @Component public class Clientes {private int custid private String custname private String coursename @Autowired private Technologies techdetail public Technologies getTechdetail ( ) {return techdetail} public void setTechdetail (Technologies techdetail) {this.techdetail = techdetail} public int getCustid () {return custid} public void setCustid (int custid) {this.custid = custid} public String getCustname () {return custname } public void setCustname (String custname) {this.custname = custname} public String getCoursename () {return coursename} public void setCoursename (String coursename) {this.coursename = coursename} public void display () {System.out.println ( 'Objeto devolvido com sucesso') techdetail.tech ()}}

Depois de executar esses arquivos, você verá as saídas como Objeto retornado com sucesso e Bem-sucedido, o que implica que nossa dependência das classes foi cumprida. Consulte abaixo.

Agora que você concluiu o artigo, verifique o pela Edureka, uma empresa de aprendizagem online confiável com uma rede de mais de 250.000 alunos satisfeitos espalhados por todo o mundo.

Tem alguma questão para nós? Mencione isso na seção de comentários deste “O que é injeção de dependência? ”Artigo e entraremos em contato com você o mais rápido possível.