<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Técnico - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Aprenda a codificar - de graça. Tutoriais de programação em Python, JavaScript, Linux e muito mais. ]]>
        </description>
        <link>https://www.freecodecamp.org/portuguese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Técnico - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/portuguese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Mon, 08 Jun 2026 04:58:24 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/portuguese/news/tag/tecnico/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Uma rápida introdução à injeção de dependências: o que é e quando usá-la ]]>
                </title>
                <description>
                    <![CDATA[ Introdução > Em engenharia de software [https://pt.wikipedia.org/wiki/Engenharia_de_software] , a injeção de dependências é uma técnica onde um objeto (ou método estático) fornece as dependências de outro objeto. Uma dependência é um objeto que pode ser usado (um serviço [https://pt.wikipedia.org/wiki/Service-oriented_architecture#Servi%C3%A7o]). Acima temos a definição de injeção de dependências da Wikipédia. Ainda ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/uma-rapida-introducao-a-injecao-de-dependencias-o-que-e-e-quando-usa-la/</link>
                <guid isPermaLink="false">61f5324853557304fa19c6a9</guid>
                
                    <category>
                        <![CDATA[ Técnico ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Sat, 29 Jan 2022 14:19:17 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/01/1_rU6KNs9KfdROiENL-UQTNA.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/a-quick-intro-to-dependency-injection-what-it-is-and-when-to-use-it-7578c84fa88f/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">A quick intro to Dependency Injection: what it is, and when to use it</a>
      </p><h3 id="introdu-o">Introdução</h3><blockquote>Em <a href="https://pt.wikipedia.org/wiki/Engenharia_de_software">engenharia de software</a>, a <strong>injeção de d<strong>epend</strong>ências</strong> é uma técnica onde um objeto (ou método estático) fornece as dependências de outro objeto. Uma dependência é um objeto que pode ser usado (um <a href="https://pt.wikipedia.org/wiki/Service-oriented_architecture#Servi%C3%A7o">serviço</a>).</blockquote><p>Acima temos a definição de injeção de dependências da Wikipédia. Ainda assim, não é algo fácil de entender. Vamos tentar entendê-la melhor.</p><p>Antes de entender o que ela significa em programação, vamos tentar entendê-la de um modo geral para compreender melhor o conceito específico.</p><p>Dependência ou dependente têm a ver com precisar de algo em termos de apoio. Se eu disser, por exemplo, que estamos dependendo demais de telefones celulares, significa que precisamos deles para fazermos outras coisas.</p><p>Assim, antes de entrar em <strong><a href="https://pt.wikipedia.org/wiki/Inje%C3%A7%C3%A3o_de_depend%C3%AAncia">injeção de d<strong>epend</strong>ências</a></strong>, primeiro vamos entender o que significa a dependência em programação.</p><p>Quando a classe A usa alguma funcionalidade da classe B, diz-se que a classe A tem uma dependência da classe B.</p><p>Em Java, antes de poder usar métodos de outras classes, primeiro precisamos criar o objeto daquela classe (ou seja, a classe A precisa criar uma instância da classe B).</p><p><strong>Desse modo<strong>, transfer</strong>ir a tarefa de criação do objeto a outra entidade e usar diretamente a dependência é chamado de <strong> </strong>injeção de dependência<strong>.</strong></strong></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/01/1_TF-VdAgPfcD497kAW77Ukg.png" class="kg-image" alt="1_TF-VdAgPfcD497kAW77Ukg" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/01/1_TF-VdAgPfcD497kAW77Ukg.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/01/1_TF-VdAgPfcD497kAW77Ukg.png 800w" sizes="(min-width: 720px) 720px" width="600" height="400" loading="lazy"><figcaption>Se o código pudesse falar</figcaption></figure><h3 id="por-que-eu-devo-usar-inje-o-de-depend-ncias"><strong>Por que eu devo usar injeção de dependências?</strong></h3><p>Vamos supor que temos uma classe carro, que contém vários objetos, como rodas, motor etc.</p><p>Aqui, a classe carro é responsável por criar todos os objetos de dependência. Porém, o que faremos se decidirmos trocar as rodas da <strong><strong>MRFWheels </strong></strong>pelas rodas da <strong><strong>Yokohama</strong></strong> no futuro?</p><p>Precisaremos recriar o objeto carro com uma nova dependência da Yokohama. No entanto, ao usar a injeção de dependências (DI, de '<em>dependency injection</em>' em inglês), podemos mudar as Rodas em tempo de execução (pois as dependências podem ser injetadas em tempo de execução em vez de em tempo de compilação).</p><p>Pense na DI como o intermediário do nosso código, que faz todo o trabalho de criar os objetos Rodas preferidos e de fornecê-los à classe Carro.</p><p>Isso torna nossa classe Carro independente da criação dos objetos Rodas, Bateria etc.</p><h4 id="basicamente-existem-tr-s-tipos-de-inje-o-de-depend-ncias-"><strong>Basicamente, existem três tipos de injeção de dependências:</strong></h4><ol><li><strong>injeção do c<strong>onstru</strong>t<strong>or:</strong></strong> as dependências são fornecidas por meio de um construtor da classe.</li><li><strong><strong>inje</strong>ção pelo <em>setter</em><strong>:</strong></strong> o cliente expõe o método <em><a href="https://www.freecodecamp.org/portuguese/news/getters-e-setters-em-java-explicados/">setter</a></em> que o injetor usa para injetar a dependência.</li><li><strong><strong>inje</strong>ção de interface<strong>:</strong></strong> a dependência fornece um método injetor, que injetará uma dependência em qualquer cliente que for passado a ele. Os clientes devem implementar uma interface que expõe um método <em>setter</em> que aceita a dependência.</li></ol><p><strong>Desse modo, agora é responsabilidade da injeção de dependência<strong>:</strong></strong></p><ol><li>Criar os objetos</li><li>Saber quais classes necessitam desses objetos</li><li>Fornecer todos esses objetos</li></ol><p>Se há alguma mudança nos objetos, a DI investiga isso e isso não deve preocupar a classe que usa esses objetos. Dessa forma, se os objetos mudarem no futuro, é a responsabilidade da DI fornecer os objetos apropriados à classe.</p><h4 id="invers-o-de-controle-o-conceito-por-tr-s-da-di"><strong>Inversão de controle — o conceito por trás da DI</strong></h4><p>O conceito por trás da DI é o de que uma classe não deve configurar suas dependências de modo estático. Elas devem ser configuradas por outra classe de fora dela.</p><p>Este é o quinto princípio do <strong><strong>S.O.L.I.D</strong></strong> — os cinco princípios básicos do design e da programação orientada a objetos, concebidos por <strong><strong><a href="https://pt.wikipedia.org/wiki/Robert_Cecil_Martin">Uncle Bob</a></strong></strong>. Esse princípio declara que uma classe deve depender de uma abstração, não de elementos concretos (em termos simples, declarações explícitas no código).</p><p>De acordo com os princípios, uma classe deve concentrar-se em atender às suas responsabilidades e não em criar objetos de que precise para atender a essas responsabilidades. É aí que entra a <strong>injeção de d<strong>epend</strong>ências</strong>: ela fornece à classe os objetos necessários.</p><p><em>Observação<em>: </em>se quiser aprender sobre os princípios do<em> <strong><strong>SOLID</strong></strong></em>, de<em> Uncle Bob</em>, visite<em> </em>este<em> <a href="https://scotch.io/bar-talk/s-o-l-i-d-the-first-five-principles-of-object-oriented-design#toc-single-responsibility-principle" rel="noopener">link</a></em> (em inglês).</em></p><h4 id="benef-cios-do-uso-da-di"><strong>Benefícios do uso da DI</strong></h4><ol><li>Ajuda no teste unitário.</li><li>O código de boilerplate é reduzido, já que a inicialização das dependências é feita pelo componente injetor.</li><li>Ampliar a aplicação fica mais fácil.</li><li>Ajuda a permitir o acoplamento fraco ('<em>loose coupling'</em>, em inglês), que é importante na programação de aplicações.</li></ol><h4 id="desvantagens-da-di"><strong>Desvantagens da DI</strong></h4><ol><li>É um pouco complexa de aprender. Seu uso em excesso pode levar a problemas de gerenciamento e outros.</li><li>Muitos erros em tempo de compilação acabam no tempo de execução.</li><li>Os frameworks de injeção de dependências são implementados por reflexão ou programação dinâmica. Isso pode complicar o uso de automação pela IDE, como 'encontrar referências', 'mostrar a hierarquia de chamada' e a refatoração segura.</li></ol><p>Você pode implementar a injeção de dependências por conta própria (diretamente) ou usar bibliotecas ou frameworks de terceiros.</p><h4 id="bibliotecas-e-frameworks-que-implementam-a-di"><strong><strong>Bibliotecas e f<strong>rameworks </strong>que implementam a<strong> DI</strong></strong></strong></h4><ul><li><a href="https://www.tutorialspoint.com/spring/spring_dependency_injection.htm" rel="noopener">Spring </a>(Java)</li><li><a href="https://github.com/google/guice" rel="noopener">Google Guice</a> (Java)</li><li><a href="http://square.github.io/dagger/" rel="noopener">Dagger </a>(Java and Android)</li><li><a href="https://github.com/castleproject/Windsor" rel="noopener">Castle Windsor</a> (.NET)</li><li><a href="https://www.microsoft.com/en-us/download/details.aspx?id=39944" rel="noopener">Unity</a>(.NET)</li></ul><p><strong>Para saber mais sobre a injeção de <strong>depend</strong>ências<strong>, </strong>você pode verificar os recursos abaixo (em inglês)<strong>:</strong></strong></p><p><a href="https://www.journaldev.com/2394/java-dependency-injection-design-pattern-example-tutorial" rel="noopener"><strong><strong>Java Dependency Injection — DI Design Pattern Example Tutorial — JournalDev</strong></strong></a></p><p><a href="http://www.vogella.com/tutorials/DependencyInjection/article.html" rel="noopener"><strong><strong>Using dependency injection in Java — Introduction — Tutorial — Vogella</strong></strong></a></p><p><a href="https://www.martinfowler.com/articles/injection.html" rel="noopener"><strong><strong>Inversion of Control Containers and the Dependency Injection pattern — Martin Fowler</strong></strong></a></p><p>Espero que isso seja útil!</p><p>Se gostou do artigo e deseja ler mais artigos incríveis, siga o autor no Medium (<a href="https://medium.com/@bhavyankaria" rel="noopener">Bhavya Karia</a>) e mostre seu apoio, pois isso o motiva a escrever mais.</p><p>Se tiver perguntas ou comentários, conecte-se ao autor pelo <a href="https://www.linkedin.com/in/bhavya-karia-1b115a93/" rel="noopener">LinkedIn,</a> pelo <a href="https://twitter.com/thebhavyakaria" rel="noopener">Twitter </a>ou pelo <a href="https://www.facebook.com/karia.bhavya" rel="noopener">Facebook</a>.</p><h4 id="primeira-edi-o-"><strong>Primeira edição:</strong></h4><p><strong><em>Agradeço a</em><strong><em><em> <a href="https://www.freecodecamp.org/news/a-quick-intro-to-dependency-injection-what-it-is-and-when-to-use-it-7578c84fa88f/undefined" rel="noopener">Sergey Ufocoder</a> </em></em></strong><em>por ter traduzido este </em><strong><em><em>arti</em></em></strong><em>go para o russo</em><strong><em><em>. </em></em></strong><em>Peço aos meus amigos russos e a quem entende o idioma que leiam o artigo</em><strong><em><em>.</em></em></strong></strong></p><p><a href="https://medium.com/@xufocoder/a-quick-intro-to-dependency-injection-what-it-is-and-when-to-use-it-de1367295ba8" rel="noopener">Link para o artigo em russo</a></p><p><strong><strong><em><em>Al</em></em></strong><em>ém dis</em><strong><em><em>so, </em></em></strong><em>se quiser aplicar a</em><strong><em><em> DI </em></em></strong><em> em </em><strong><em><em>JavaScript </em></em></strong><em>e se estiver procurando por uma biblioteca para isso,</em><strong><em><em> <a href="https://www.freecodecamp.org/news/a-quick-intro-to-dependency-injection-what-it-is-and-when-to-use-it-7578c84fa88f/undefined" rel="noopener">Jo Surikat</a> </em></em></strong><em>(texto em inglês) </em><strong><em><em>sug</em></em></strong><em>ere experimentar a biblioteca </em></strong><em><a href="https://di-ninja.github.io/di-ninja/" rel="noopener"><strong>Di-Ninja</strong></a><strong>.</strong></em></p><p><strong><em>Mais uma biblioteca de</em><strong><em><em> DI </em></em></strong><em>em</em><strong><em><em> JavaScript </em></em></strong><em>incrível foi sugerida por </em><strong><em><em><a href="https://www.freecodecamp.org/news/a-quick-intro-to-dependency-injection-what-it-is-and-when-to-use-it-7578c84fa88f/undefined" rel="noopener">Nicolas Froidure</a></em></em></strong><em> (texto em inglês), a </em></strong><em><a href="https://github.com/nfroidure/knifecycle" rel="noopener"><strong>knifecycle</strong></a><strong>.</strong></em></p><h4 id="segunda-edi-o-"><strong>Segunda edição:</strong></h4><p><strong><em>Se você é um desenvolvedor em </em><strong><em><em>PHP</em></em></strong><em>, não se preocupe. Temos DI para você também</em><strong><em><em>. <a href="https://www.freecodecamp.org/news/a-quick-intro-to-dependency-injection-what-it-is-and-when-to-use-it-7578c84fa88f/undefined" rel="noopener">Gordon Forsythe</a> </em></em></strong><em>(texto em inglês) </em><strong><em><em>recom</em></em></strong><em>endou esta biblioteca fantástica, que você pode querer experimentar, a </em></strong><a href="https://github.com/rdlowrey/auryn" rel="noopener"><strong><em>auryn</em></strong></a><strong>.</strong></p><p>O autor agradece a todos pelos comentários positivos que vem recebendo. Compartilhe o artigo para que mais pessoas possam tirar proveito dele.</p><p>Se aprendeu alguma coisa de valor nessa leitura, compartilhe o artigo com outras pessoas!</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
