{"id":18143,"date":"2021-04-12T12:15:25","date_gmt":"2021-04-12T15:15:25","guid":{"rendered":"https:\/\/enotas.com.br\/blog\/?p=18143"},"modified":"2021-04-12T12:15:26","modified_gmt":"2021-04-12T15:15:26","slug":"spring-framework","status":"publish","type":"post","link":"https:\/\/enotas.com.br\/blog\/spring-framework\/","title":{"rendered":"Spring Framework: Descubra o que \u00e9, seus m\u00f3dulos e exemplos!"},"content":{"rendered":"<p dir=\"ltr\"><strong>Acompanhe o nosso post e fique por dentro das informa\u00e7\u00f5es mais importantes sobre o Spring Framework, que foi desenvolvido para o Java!<\/strong><\/p>\n<p dir=\"ltr\">O Spring Framework fornece um modelo abrangente de programa\u00e7\u00e3o e configura\u00e7\u00e3o para aplicativos empresariais modernos baseados em Java \u2014 em qualquer tipo de plataforma de implanta\u00e7\u00e3o.<\/p>\n<p dir=\"ltr\">Um elemento-chave do Spring \u00e9 o suporte de infraestrutura no n\u00edvel do aplicativo: o Spring se concentra na &#8220;canaliza\u00e7\u00e3o&#8221; dos aplicativos corporativos para que as equipes possam se concentrar na l\u00f3gica de neg\u00f3cios no n\u00edvel do aplicativo, sem v\u00ednculos desnecess\u00e1rios com ambientes de implementa\u00e7\u00e3o espec\u00edficos.<\/p>\n<p dir=\"ltr\">Se voc\u00ea quer entender mais sobre o <strong>Spring Framework<\/strong>, n\u00e3o deixe de acompanhar este nosso post, onde faremos uma introdu\u00e7\u00e3o completa!<\/p>\n<blockquote style=\"\"><p><strong>Veja tamb\u00e9m:<\/strong><\/p><\/blockquote>\n<blockquote><p><a href=\"https:\/\/enotas.com.br\/blog\/desenvolvimento-agil\/\" style=\"outline: none;\" target=\"_blank\" rel=\"noopener noreferrer\">Desenvolvimento \u00c1gil de software: entenda o que \u00e9<\/a><\/p><\/blockquote>\n<blockquote><p><a href=\"https:\/\/enotas.com.br\/blog\/net-framework\/\" target=\"_blank\" style=\"outline: none;\" rel=\"noopener noreferrer\">O que \u00e9 o .NET Framework? Quais as vantagens?<\/a><\/p><\/blockquote>\n<blockquote><p><a href=\"https:\/\/enotas.com.br\/blog\/ebook\/rejeicoes-de-nota-fiscal\/\" style=\"outline: none;\" target=\"_blank\" rel=\"noopener noreferrer\">12 principais rejei\u00e7\u00f5es de nota fiscal que toda Software House deve conhecer<\/a><\/p><\/blockquote>\n<h2 dir=\"ltr\">O que \u00e9 o Spring Framework?<\/h2>\n<p><span><img decoding=\"async\" alt=\"Spring-Framework\" data-id=\"18151\" width=\"843\" data-init-width=\"3038\" height=\"362\" data-init-height=\"1305\" title=\"Spring-Framework\" loading=\"lazy\" src=\"https:\/\/enotas.com.br\/blog\/wp-content\/uploads\/2021\/04\/Spring-Framework.png\" data-width=\"843\" data-height=\"362\"><\/span><\/p>\n<p dir=\"ltr\">O <strong>Spring<\/strong> \u00e9 uma ferramenta na categoria <strong>Frameworks<\/strong> (Full Stack) de uma pilha de tecnologia. Foi desenvolvido para a plataforma Java baseado nos padr\u00f5es de projetos (Design Patterns), invers\u00e3o de controle e inje\u00e7\u00e3o de depend\u00eancia.<\/p>\n<p dir=\"ltr\">O Spring disp\u00f5e para o programador diversas tecnologias, que simplificam o desenvolvimento de c\u00f3digo de infraestrutura.&nbsp;<\/p>\n<p dir=\"ltr\">Trata-se de uma ferramenta de c\u00f3digo aberto com 42,2 mil estrelas do <a href=\"https:\/\/enotas.com.br\/blog\/github\/\" style=\"outline: none;\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub<\/a> e 29,4 mil garfos do GitHub. Aqui est\u00e1 um link para o reposit\u00f3rio de c\u00f3digo aberto do <a href=\"https:\/\/github.com\/spring-projects\/spring-framework\" target=\"_blank\" rel=\"noopener noreferrer\">Spring no GitHub<\/a>.<\/p>\n<p><strong>Curiosidade<\/strong><\/p>\n<p>O&nbsp;<strong>Spring Framework<\/strong> \u00e9 constitu\u00eddo por diversos e completos m\u00f3dulos capazes de dar um boost na aplica\u00e7\u00e3o Java.<\/p>\n<p dir=\"ltr\">Por meio do Spring fica mais f\u00e1cil criar aplicativos corporativos Java. Ele fornece tudo que voc\u00ea precisa para adotar a linguagem Java em um ambiente corporativo, com suporte para Groovy e Kotlin como linguagens alternativas na JVM.<\/p>\n<p dir=\"ltr\">Al\u00e9m disso, traz a flexibilidade de criar muitos tipos de arquiteturas dependendo das necessidades de um aplicativo.&nbsp;<\/p>\n<p><strong>aten\u00e7\u00e3o<\/strong><\/p>\n<p>A partir do Spring Framework 5.1, o Spring requer JDK 8+ (Java SE 8+) e fornece suporte pronto para uso para JDK 11 LTS.<\/p>\n<p>A atualiza\u00e7\u00e3o 60 do Java SE 8 \u00e9 sugerida como a vers\u00e3o de patch m\u00ednima para Java 8, mas geralmente \u00e9 recomendado usar uma vers\u00e3o de patch recente.<\/p>\n<p dir=\"ltr\">Em uma grande empresa, os aplicativos geralmente existem por um longo tempo e precisam ser executados em um JDK e em um servidor de aplicativos cujo ciclo de atualiza\u00e7\u00e3o est\u00e1 al\u00e9m do controle do desenvolvedor.&nbsp;<\/p>\n<p dir=\"ltr\">O Spring Framework \u00e9 dividido em m\u00f3dulos. Os aplicativos podem escolher quais m\u00f3dulos precisam. No centro est\u00e3o os m\u00f3dulos do cont\u00eainer principal, incluindo um modelo de configura\u00e7\u00e3o e um mecanismo de inje\u00e7\u00e3o de depend\u00eancia.&nbsp;<\/p>\n<p dir=\"ltr\">E tem mais! O Spring Framework fornece suporte b\u00e1sico para diferentes arquiteturas de aplicativos, incluindo mensagens e dados transacionais.<\/p>\n<p dir=\"ltr\">Ele tamb\u00e9m inclui a estrutura da web Spring MVC baseada em Servlet e, em paralelo, a estrutura da web reativa Spring WebFlux.<\/p>\n<h3 dir=\"ltr\">O que \u00e9 Invers\u00e3o de Controle<\/h3>\n<p dir=\"ltr\"><strong>Invers\u00e3o de controle <\/strong>(Inversion of Control ou IoC) trata-se da interrup\u00e7\u00e3o do fluxo de execu\u00e7\u00e3o de um c\u00f3digo, retirando, de certa forma, o controle sobre ele e delegando-o para uma depend\u00eancia ou container. O principal prop\u00f3sito \u00e9 <strong>minificar<\/strong> o acoplamento do c\u00f3digo.<\/p>\n<p dir=\"ltr\">Isso permite que exista uma facilidade na hora de trocar ou acrescentar comportamentos ao sistema (se necess\u00e1rio) e tamb\u00e9m diminui a possibilidade de ocorr\u00eancia bugs em cascata.<\/p>\n<p dir=\"ltr\">No Spring Framework, a interdepend\u00eancia entre os objetos \u00e9 m\u00ednima, ou seja, &nbsp;as inst\u00e2ncias das classes s\u00e3o fracamente acopladas. E a invers\u00e3o de controle, no Spring, \u00e9 facilitada por outro Design Pattern: <strong>Inje\u00e7\u00e3o de Depend\u00eancia<\/strong>.<\/p>\n<h3 dir=\"ltr\">O que \u00e9 Inje\u00e7\u00e3o de Depend\u00eancia<\/h3>\n<p dir=\"ltr\">A<strong> inje\u00e7\u00e3o de depend\u00eancia<\/strong> tem como objetivo evitar o acoplamento de c\u00f3digo em uma aplica\u00e7\u00e3o.&nbsp;<\/p>\n<p dir=\"ltr\">Portanto, podemos dizer que a inje\u00e7\u00e3o de depend\u00eancia \u00e9 uma forma de aplicar a invers\u00e3o de controle. E isso pode ser feito de 3 formas no Spring Framework, veja:<\/p>\n<ul>\n<li dir=\"ltr\">anota\u00e7\u00e3o @Autowired;<\/li>\n<li dir=\"ltr\">Construtor da Classe (Constructor Injection);<\/li>\n<li dir=\"ltr\">M\u00e9todo Setter (Setter Injection).<\/li>\n<\/ul>\n<p dir=\"ltr\">Entre as tr\u00eas op\u00e7\u00f5es, a mais indicada de ser utilizada \u00e9 por <strong>Construtor da Classe<\/strong>, isso pois traz v\u00e1rias vantagens, como: o aumento da legibilidade do c\u00f3digo, facilidade de manuten\u00e7\u00e3o e facilidade na constru\u00e7\u00e3o dos testes.<\/p>\n<p><strong>Curiosidade<\/strong><\/p>\n<p>O Spring Framework oferece suporte para testes tamb\u00e9m!<\/p>\n<p dir=\"ltr\">Veja na imagem abaixo como fica o c\u00f3digo:<\/p>\n<p><span><img decoding=\"async\" alt=\"Construtor-da-classe\" data-id=\"18145\" width=\"672\" data-init-width=\"672\" height=\"254\" data-init-height=\"254\" title=\"Construtor-da-classe\" loading=\"lazy\" src=\"https:\/\/enotas.com.br\/blog\/wp-content\/uploads\/2021\/04\/Construtor-da-classe.png\" data-width=\"672\" data-height=\"254\"><\/span><\/p>\n<h2 dir=\"ltr\">Quais os principais princ\u00edpios do Spring Framework?<\/h2>\n<p dir=\"ltr\">Quando voc\u00ea aprende sobre uma estrutura, \u00e9 importante saber n\u00e3o apenas o que ela faz, mas quais princ\u00edpios ela segue. Aqui est\u00e3o os princ\u00edpios orientadores do Spring Framework:<\/p>\n<h3 dir=\"ltr\">Ofere\u00e7a op\u00e7\u00f5es em todos os n\u00edveis&nbsp;<\/h3>\n<p dir=\"ltr\">O Spring permite adiar as decis\u00f5es de design o mais tarde poss\u00edvel. Por exemplo, voc\u00ea pode alternar os provedores de persist\u00eancia por meio da configura\u00e7\u00e3o sem alterar seu c\u00f3digo.&nbsp;<\/p>\n<p dir=\"ltr\">O mesmo \u00e9 verdadeiro para muitas outras quest\u00f5es de infraestrutura e integra\u00e7\u00e3o com <a href=\"https:\/\/enotas.com.br\/blog\/api-para-nota-fiscal\/\" style=\"outline: none;\" target=\"_blank\" rel=\"noopener noreferrer\">API<\/a>s de terceiros.<\/p>\n<p><strong>Curiosidade<\/strong><\/p>\n<p>Acompanhe o nosso guia e descubra a import\u00e2ncia de&nbsp;<a href=\"https:\/\/enotas.com.br\/blog\/documentar-uma-api\/\" target=\"_blank\" style=\"outline: none;\" rel=\"noopener noreferrer\">documentar uma API<\/a> e tenha acesso a boas pr\u00e1ticas para realizar essa atividade de forma eficiente!<\/p>\n<h3 dir=\"ltr\">Acomode perspectivas diversas&nbsp;<\/h3>\n<p dir=\"ltr\">O Spring abra\u00e7a a flexibilidade e n\u00e3o tem opini\u00e3o sobre como as coisas devem ser feitas. Suporta uma ampla gama de necessidades de aplica\u00e7\u00e3o com diferentes perspectivas.<\/p>\n<h3 dir=\"ltr\">Mantenha uma forte compatibilidade com vers\u00f5es anteriores&nbsp;<\/h3>\n<p dir=\"ltr\">A evolu\u00e7\u00e3o do Spring foi cuidadosamente gerenciada para for\u00e7ar poucas mudan\u00e7as significativas entre as vers\u00f5es.&nbsp;<\/p>\n<p dir=\"ltr\">O Spring oferece suporte a uma gama cuidadosamente escolhida de vers\u00f5es de JDK e bibliotecas de terceiros para facilitar a manuten\u00e7\u00e3o de aplicativos e bibliotecas que dependem do Spring.<\/p>\n<h3 dir=\"ltr\">Preocupe-se com o design da API&nbsp;<\/h3>\n<p dir=\"ltr\">A equipe do Spring dedica muito tempo e reflex\u00e3o para criar APIs que sejam intuitivas e que se sustentem em muitas vers\u00f5es e muitos anos.<\/p>\n<h3 dir=\"ltr\">Defina altos padr\u00f5es de qualidade de c\u00f3digo&nbsp;<\/h3>\n<p dir=\"ltr\">O Spring Framework enfatiza fortemente o javadoc significativo, atual e preciso. \u00c9 um dos poucos projetos que podem reivindicar uma estrutura de c\u00f3digo limpa, sem depend\u00eancias circulares entre os pacotes.<\/p>\n<h4 dir=\"ltr\">Sugest\u00e3o para quem est\u00e1 come\u00e7ando<\/h4>\n<p dir=\"ltr\">Se voc\u00ea est\u00e1 apenas come\u00e7ando a usar o Spring, talvez queira come\u00e7ar a usar o Spring Framework criando um aplicativo baseado em <strong>Spring Boot<\/strong>.&nbsp;<\/p>\n<p dir=\"ltr\"><a href=\"https:\/\/spring.io\/projects\/spring-boot\" style=\"outline: none;\" target=\"_blank\" rel=\"noopener noreferrer\">Spring Boot<\/a> fornece uma maneira r\u00e1pida (e opinativa) de criar um aplicativo baseado em Spring pronto para produ\u00e7\u00e3o.&nbsp;<\/p>\n<p dir=\"ltr\">Ele \u00e9 baseado no Spring Framework, favorece a conven\u00e7\u00e3o em vez da configura\u00e7\u00e3o e foi projetado para coloc\u00e1-lo em funcionamento o mais r\u00e1pido poss\u00edvel.<\/p>\n<p dir=\"ltr\">Voc\u00ea pode usar <a href=\"https:\/\/start.spring.io\/\" style=\"outline: none;\" target=\"_blank\" rel=\"noopener noreferrer\">start.spring.io<\/a> para gerar um projeto b\u00e1sico ou seguir um dos <a href=\"https:\/\/spring.io\/guides\" style=\"outline: none;\" target=\"_blank\" rel=\"noopener noreferrer\">guias de &#8220;Introdu\u00e7\u00e3o&#8221;<\/a>, como Introdu\u00e7\u00e3o \u00e0 constru\u00e7\u00e3o de um servi\u00e7o da Web RESTful.&nbsp;<\/p>\n<p dir=\"ltr\">Al\u00e9m de serem mais f\u00e1ceis de digerir, esses guias s\u00e3o muito focados em tarefas e a maioria deles \u00e9 baseada no Spring Boot. Eles tamb\u00e9m cobrem outros projetos do portf\u00f3lio Spring que voc\u00ea pode querer considerar ao resolver um problema espec\u00edfico.<\/p>\n<p><span><img decoding=\"async\" alt=\"18 principais perguntas sobre nota fiscal eletronica\" data-id=\"15266\" width=\"175\" data-init-width=\"1080\" height=\"175\" data-init-height=\"1080\" title=\"as-18-principais-perguntas-sobre-nota-fiscal\" loading=\"lazy\" src=\"https:\/\/enotas.com.br\/blog\/wp-content\/uploads\/2021\/02\/as-18-principais-perguntas-sobre-nota-fiscal.png\" data-width=\"175\" data-height=\"175\"><\/span><\/p>\n<blockquote style=\"text-align: center;\"><p><strong>Ebook: As 18 principais perguntas sobre nota fiscal eletr\u00f4nica<\/strong><\/p><\/blockquote>\n<h2 dir=\"ltr\">Qual \u00e9 a diferen\u00e7a entre Spring Framework e Spring Boot?<\/h2>\n<p dir=\"ltr\">O Spring Boot se baseia no Spring.&nbsp;<\/p>\n<p dir=\"ltr\">O Spring oferece a capacidade de ler em arquivos .properties de uma variedade de lugares, com a ajuda de anota\u00e7\u00f5es @PropertySource. Ele tamb\u00e9m oferece a capacidade de escrever controladores JSON REST com a ajuda de sua estrutura Web MVC.<\/p>\n<p dir=\"ltr\">O problema \u00e9 que voc\u00ea deve escrever e configurar todas essas pe\u00e7as individuais sozinho. Spring Boot, por outro lado, pega essas pe\u00e7as individuais e as empacota. Exemplo:<\/p>\n<p><span><img decoding=\"async\" alt=\"spring-boot\" data-id=\"18148\" width=\"843\" data-init-width=\"949\" height=\"59\" data-init-height=\"66\" title=\"spring-boot\" loading=\"lazy\" src=\"https:\/\/enotas.com.br\/blog\/wp-content\/uploads\/2021\/04\/spring-boot.png\" data-width=\"843\" data-height=\"59\"><\/span><\/p>\n<p dir=\"ltr\">Portanto, o Spring Boot trata de pegar as partes existentes do Spring framework, pr\u00e9-configurando e empacotando-as &#8211; com o m\u00ednimo de trabalho de desenvolvimento necess\u00e1rio.<\/p>\n<h2 dir=\"ltr\">O que os outros 20 projetos Spring.io fazem?<\/h2>\n<p dir=\"ltr\">No escopo deste guia, n\u00e3o posso entrar em detalhes de todos os diferentes projetos, mas vamos dar uma olhada naqueles que voc\u00ea provavelmente encontrar\u00e1.<\/p>\n<p dir=\"ltr\"><strong>Spring Boot: <\/strong>Provavelmente o projeto Spring mais popular. Spring Boot \u00e9 uma vers\u00e3o opinativa do Spring Framework.&nbsp;<\/p>\n<p dir=\"ltr\"><strong>Spring Batch: <\/strong>Uma biblioteca que o ajuda a escrever os bons e velhos trabalhos em lote.<\/p>\n<p dir=\"ltr\"><strong>Spring Cloud:<\/strong> Um conjunto de bibliotecas que ajudam seu projeto Spring a se integrar mais facilmente com a nuvem (pense: AWS) ou escrever microsservi\u00e7os.<\/p>\n<p dir=\"ltr\"><strong>Spring Security:<\/strong> uma biblioteca que ajuda a proteger, por exemplo, seu aplicativo da web com OAuth2 ou Basic Auth.<\/p>\n<p dir=\"ltr\"><strong>Conclus\u00e3o:<\/strong> todas essas bibliotecas estendem o Spring Framework e se baseiam em seus princ\u00edpios b\u00e1sicos de inje\u00e7\u00e3o de depend\u00eancia.<\/p>\n<h2 dir=\"ltr\">Existem alternativas para o cont\u00eainer de inje\u00e7\u00e3o de depend\u00eancia do Spring Framework?<\/h2>\n<p dir=\"ltr\">Sim, dois populares no ecossistema Java s\u00e3o:<\/p>\n<ul>\n<li dir=\"ltr\"><a href=\"https:\/\/github.com\/google\/guice\" style=\"outline: none;\">Google\u2019s Guice<\/a>.<\/li>\n<li dir=\"ltr\"><a href=\"https:\/\/github.com\/google\/dagger\" style=\"outline: none;\">Google\u2019s Dagger<\/a>, anteriormente Square\u2019s.<\/li>\n<\/ul>\n<p dir=\"ltr\">Observe que o <strong>Dagger<\/strong> oferece apenas inje\u00e7\u00e3o de depend\u00eancia, sem recursos de conveni\u00eancia adicionais.&nbsp;<\/p>\n<p dir=\"ltr\">O <strong>Guice<\/strong> oferece inje\u00e7\u00e3o de depend\u00eancia e outros recursos como gerenciamento de transa\u00e7\u00f5es (com a ajuda do Guice Persist).<\/p>\n<h2 dir=\"ltr\">Conclus\u00e3o<\/h2>\n<p dir=\"ltr\">Como voc\u00ea p\u00f4de perceber, existem uma infinidade de ferramentas para facilitar o seu trabalho com Java.<\/p>\n<p dir=\"ltr\">Al\u00e9m disso, para aplica\u00e7\u00f5es web e o pr\u00f3prio uso do Java, o framework e seus m\u00f3dulos s\u00e3o fundamentais para acelerar seu trabalho.<\/p>\n<p dir=\"ltr\">Aproveite e confira nosso post sobre as <a href=\"https:\/\/enotas.com.br\/blog\/linguagens-de-programacao\/\" style=\"outline: none;\" target=\"_blank\" rel=\"noopener noreferrer\">11 linguagens de programa\u00e7\u00e3o mais usadas no mercado de tecnologia<\/a>.<\/p>\n<h3>Vivencie a melhor experi\u00eancia da gal\u00e1xia em automa\u00e7\u00e3o fiscal!<\/h3>\n<p>O que mais voc\u00ea entregaria aos seus clientes se n\u00e3o tivesse de gastar tanto tempo se preocupando com esse processo burocr\u00e1tico de emiss\u00e3o de notas fiscais?<\/p>\n<p><a href=\"https:\/\/www.enotas.com.br\/\" target=\"_blank\" rel=\"noopener noreferrer\">Conhe\u00e7a a eNotas!<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Acompanhe o nosso post e fique por dentro das informa\u00e7\u00f5es mais importantes sobre o Spring Framework, que foi desenvolvido para o Java! O Spring Framework fornece um modelo abrangente de programa\u00e7\u00e3o e configura\u00e7\u00e3o para aplicativos empresariais modernos baseados em Java \u2014 em qualquer tipo de plataforma de implanta\u00e7\u00e3o. Um elemento-chave do Spring \u00e9 o suporte [&#8230;]<\/p>\n","protected":false},"author":15,"featured_media":18153,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[205],"tags":[],"class_list":["post-18143","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tech"],"_links":{"self":[{"href":"https:\/\/enotas.com.br\/blog\/wp-json\/wp\/v2\/posts\/18143","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/enotas.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/enotas.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/enotas.com.br\/blog\/wp-json\/wp\/v2\/users\/15"}],"replies":[{"embeddable":true,"href":"https:\/\/enotas.com.br\/blog\/wp-json\/wp\/v2\/comments?post=18143"}],"version-history":[{"count":7,"href":"https:\/\/enotas.com.br\/blog\/wp-json\/wp\/v2\/posts\/18143\/revisions"}],"predecessor-version":[{"id":18154,"href":"https:\/\/enotas.com.br\/blog\/wp-json\/wp\/v2\/posts\/18143\/revisions\/18154"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/enotas.com.br\/blog\/wp-json\/wp\/v2\/media\/18153"}],"wp:attachment":[{"href":"https:\/\/enotas.com.br\/blog\/wp-json\/wp\/v2\/media?parent=18143"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/enotas.com.br\/blog\/wp-json\/wp\/v2\/categories?post=18143"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/enotas.com.br\/blog\/wp-json\/wp\/v2\/tags?post=18143"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}