CodeGym /Blogue Java /Random-PT /Spring para pessoas preguiçosas Fundação, conceitos básic...
John Squirrels
Nível 41
San Francisco

Spring para pessoas preguiçosas Fundação, conceitos básicos e exemplos com código. Parte 1

Publicado no grupo Random-PT
Spring para pessoas preguiçosas Fundação, conceitos básicos e exemplos com código.  Parte 1 - 1Neste artigo, não vou dizer a você como colocar um projeto Spring funcionando em 5 minutos usando meu código. Vou apenas escrever o básico - coisas que você pode ignorar e ainda assim criar um projeto. Mas neste artigo você ainda não entenderá o que está acontecendo e, mais importante, por quê.

O que é o Spring Framework?

O Spring Framework, ou simplesmente Spring, é um dos frameworks mais populares para criação de aplicações web em Java. Um framework é como uma biblioteca (talvez você esteja mais familiarizado com este termo), mas há algo a considerar. Grosso modo, quando você usa uma biblioteca, você simplesmente cria instâncias das classes que ela contém, chama os métodos de que precisa e, assim, obtém o resultado de que precisa. Em outras palavras, esta é uma abordagem mais imperativa: em seu programa, você indica explicitamente o momento específico em que precisa criar qual objeto, quando chamar qual método específico, etc. Com frameworks, as coisas são um pouco diferentes. Você simplesmente escreve algumas classes próprias e escreve alguma lógica nelas, mas então a própria estrutura cria instâncias de suas classes e chama seus métodos. Suas classes geralmente implementam algumas interfaces do framework ou herdam algumas de suas classes, fornecendo assim algumas funcionalidades que já foram escritas para você. Mas isso nem sempre é o caso. Por exemplo, o Spring tenta o máximo possível evitar esse acoplamento rígido (onde suas classes dependem diretamente de classes/interfaces no framework). Ele usa anotações para conseguir isso. Voltaremos a isso mais tarde. Mas é importante entender que o Spring é apenas uma coleção de classes e interfaces disponíveis para você usar :) Também quero observar desde já que o Spring pode ser usado não apenas para aplicativos da Web, mas também para os programas de console mais comuns tão familiares a todos nós. E ainda vamos escrever um deles hoje. fornecendo assim algumas funcionalidades que já foram escritas para você. Mas isso nem sempre é o caso. Por exemplo, o Spring tenta o máximo possível evitar esse acoplamento rígido (onde suas classes dependem diretamente de classes/interfaces no framework). Ele usa anotações para conseguir isso. Voltaremos a isso mais tarde. Mas é importante entender que o Spring é apenas uma coleção de classes e interfaces disponíveis para você usar :) Também quero observar desde já que o Spring pode ser usado não apenas para aplicativos da Web, mas também para os programas de console mais comuns tão familiares a todos nós. E ainda vamos escrever um deles hoje. fornecendo assim algumas funcionalidades que já foram escritas para você. Mas isso nem sempre é o caso. Por exemplo, o Spring tenta o máximo possível evitar esse acoplamento rígido (onde suas classes dependem diretamente de classes/interfaces no framework). Ele usa anotações para conseguir isso. Voltaremos a isso mais tarde. Mas é importante entender que o Spring é apenas uma coleção de classes e interfaces disponíveis para você usar :) Também quero observar desde já que o Spring pode ser usado não apenas para aplicativos da Web, mas também para os programas de console mais comuns tão familiares a todos nós. E ainda vamos escrever um deles hoje. O Spring tenta o máximo possível evitar esse acoplamento rígido (onde suas classes dependem diretamente de classes/interfaces no framework). Ele usa anotações para conseguir isso. Voltaremos a isso mais tarde. Mas é importante entender que o Spring é apenas uma coleção de classes e interfaces disponíveis para você usar :) Também quero observar desde já que o Spring pode ser usado não apenas para aplicativos da Web, mas também para os programas de console mais comuns tão familiares a todos nós. E ainda vamos escrever um deles hoje. O Spring tenta o máximo possível evitar esse acoplamento rígido (onde suas classes dependem diretamente de classes/interfaces no framework). Ele usa anotações para conseguir isso. Voltaremos a isso mais tarde. Mas é importante entender que o Spring é apenas uma coleção de classes e interfaces disponíveis para você usar :) Também quero observar desde já que o Spring pode ser usado não apenas para aplicativos da Web, mas também para os programas de console mais comuns tão familiares a todos nós. E ainda vamos escrever um deles hoje. ) Também quero observar imediatamente que o Spring pode ser usado não apenas para aplicativos da Web, mas também para os programas de console mais comuns que são tão familiares para todos nós. E ainda vamos escrever um deles hoje. ) Também quero observar imediatamente que o Spring pode ser usado não apenas para aplicativos da Web, mas também para os programas de console mais comuns que são tão familiares para todos nós. E ainda vamos escrever um deles hoje.

Estrutura

Mas o Spring não é apenas uma estrutura específica. Em vez disso, é um nome comum usado para se referir a vários pequenos frameworks, cada um dos quais faz seu próprio tipo de trabalho. Spring para pessoas preguiçosas Fundação, conceitos básicos e exemplos com código.  Parte 1 - 2

https://docs.spring.io/spring/docs/4.3.26.RELEASE/spring-framework-reference/htmlsingle/
Figura 2.1. Visão geral do Spring Framework

Como você pode ver, o Spring é modular. Isso nos permite conectar apenas os módulos que precisamos para nossa aplicação e não conectar aqueles que obviamente não usaremos. Até onde eu sei, foi essa abordagem que permitiu que o Spring superasse seu então concorrente (EJB) e assumisse a liderança. Os aplicativos que usam EJB arrastavam muitas dependências para trás e, como resultado, eles se tornavam lentos e lentos. A imagem mostra que o Spring Framework é composto por vários módulos:
  • Acesso de dados
  • Rede
  • Essencial
  • e mais
Hoje vamos conhecer alguns conceitos do módulo principal: beans, contexto, entre outros. Como você deve ter adivinhado, o módulo Data Access contém ferramentas para trabalhar com dados (principalmente bancos de dados) e o módulo Web é para trabalhar em uma rede (incluindo a criação de aplicativos da Web, que serão discutidos posteriormente). Além disso, existe uma infraestrutura abrangente que oferece suporte ao Spring: muitos outros projetos que não estão oficialmente incluídos no próprio framework, mas estão perfeitamente integrados ao seu projeto Spring (por exemplo, Spring Security, que também espero abordar, é para autenticar um usuário em um site).

Por que o Java tem o Spring Framework?

Bem, além do fato de estar na moda, elegante e fresco, posso dizer agora que, assim que você adquirir uma pequena quantidade de habilidade usando o Spring, entenderá como existem todos os tipos de trabalho que você não tem mais fazer e quanto trabalho o Spring assume. Você pode escrever algumas dezenas de linhas de definições de configuração e escrever algumas classes, e você acaba com um projeto de trabalho. Mas assim que você começar a se perguntar quanta coisa está oculta, quanto trabalho está sendo feito e quanto código você teria que escrever se fosse implementar o mesmo projeto baseado em servlets simples ou soquetes e Java puro, seu cabelo vai ficar em pé :) A primavera é até descrita como uma espécie de mágica. Você experimenta isso quando vê que tudo funciona, mas você também tem uma ideia aproximada de como e quanto trabalho está acontecendo nos bastidores - então parece que realmente há algum tipo de mágica em ação :) É mais fácil chamá-la de mágica do que tentar explicar como tudo está interconectado. :) O segundo argumento a favor do estudo do Spring é que aproximadamente 90% das vagas de emprego para desenvolvedores juniores (com base em minhas observações pessoais) exigem conhecimento ou pelo menos uma ideia geral do que é o SpringData, Web MVC, e Securitymódulos oferecem desenvolvedores sofisticados :) Mas hoje é apenas sobre o básico.

DI/IoC

Se você já tentou ler sobre o Spring, a primeira coisa que encontrou provavelmente foram estes acrônimos: DI/IoC. Agora, eu recomendo fortemente que você faça uma pausa neste artigo e leia este artigo da DZone ! IoC significa inversão de controle. Já mencionei isso de passagem quando escrevi que usar uma biblioteca envolve você mesmo indicar em seu código qual método chamar em qual objeto, mas usar um framework geralmente significa que o framework chamará seu código no momento certo. Ou seja, neste último caso, você não está mais gerenciando o processo de execução do código/programa — o framework faz isso por você. Você passou o controle para o framework (inversão de controle). DI significa injeção de dependência. Com a injeção de dependência, você não cria objetos cat no método principal e depois os passa para seus métodos. Em vez disso, o Spring Framework os cria para você. Você simplesmente diz algo como "Quero um gato aqui" e o framework passa um para você em seu método. Veremos essa abreviação em artigos futuros.

Beans e contexto

Um dos conceitos-chave no Spring é um bean. Na verdade, este é apenas um objeto de alguma classe. Suponha que temos um programa que requer 3 objetos: um gato, um cachorro e um papagaio. E temos várias classes com vários métodos. Às vezes precisamos de um gato para um método, às vezes precisamos de um cachorro para um método diferente e às vezes nossos métodos precisam de um gato e um papagaio (por exemplo, o método para alimentar o gato, ha-ha). Para ainda outros métodos, todos os três objetos são necessários. Sim, poderíamos primeiro criar esses três objetos no método main, e então passá-los para nossas classes, e então dentro dessas classes passá-los para os métodos relevantes... E assim por diante ao longo de todo o programa. Mas se também supusermos que ocasionalmente queremos alterar a lista de parâmetros de entrada para nossos métodos (por exemplo, decidirmos reescrever algo ou adicionar novas funcionalidades), então teremos que fazer algumas mudanças no código. E agora imagine que não temos 3, mas 300 desses objetos. Uma alternativa seria reunir todos os nossos objetos em uma lista (List<Object>), passe-o para todos os métodos e, em seguida, obtenha o objeto necessário enquanto estiver dentro dos métodos. Mas, à medida que o programa é executado, e se algum objeto for adicionado a essa lista, ou pior, e se algum for excluído? Isso tem o potencial de interromper todos os métodos em que usamos um índice para obter objetos da lista. Para evitar esse problema, decidimos armazenar nossos objetos não em uma lista, mas em um mapa, onde a chave é o nome do objeto e o valor é o próprio objeto. Isso nos permite recuperar os objetos de que precisamos simplesmente usando seus nomes, por exemplo, get("papagaio") e, em resposta, obtemos o objeto papagaio. Ou a chave pode ser a classe do objeto e o valor pode ser o próprio objeto. Nesse caso, em vez de especificar o nome do objeto, podemos apenas especificar a classe do objeto de que precisamos. Isso também é conveniente. Ou podemos até mesmo escrever algum tipo de wrapper para o mapa, onde alguns métodos obtêm objetos por seu nome e outros métodos obtêm objetos por sua classe. O que chegamos aqui é chamado decontexto do aplicativo no Spring Framework. Um contexto é uma coleção de beans (objetos). Acessamos um contexto para obter o bean (objeto) que precisamos por seu nome, por seu tipo ou por algum outro meio. Além disso, podemos pedir ao próprio Spring para procurar em seu próprio contexto o bean de que precisamos e passá-lo para o nosso método. Por exemplo, suponha que tivéssemos um método como este:

public void doSomething(Cat cat) {
    ...
}
Quando o Spring chamou esse método, ele pegou nosso objeto cat de seu contexto e o passou para o método. Mas agora decidimos que, além de um gato, nosso método também precisa de um papagaio. Com o Spring, nada poderia ser mais fácil! Simplesmente escrevemos:

public void doSomething(Cat cat, Parrot parrot) {
    ...
}
Agora, quando o Spring chama nosso método, ele entende a necessidade de passar um gato e um papagaio, então ele vai ao seu contexto, pega esses dois objetos e os passa para o nosso método. Ao transferir as rédeas do controle para o Spring, também transferimos a responsabilidade de criar objetos e passá-los para nossos métodos, que o Spring chamará. Isso levanta a questão: como o Spring sabe quais objetos (beans) criar?

Formas de configurar um aplicativo

Existem três maneiras principais de configurar um aplicativo , ou seja, maneiras de dizer ao Spring exatamente quais objetos precisamos:
  1. arquivos de configuração XML
  2. Configuração baseada em Java
  3. configuração automática
Os criadores do Spring os priorizam nesta ordem:
  • o método com prioridade máxima, que deve ser preferido, é a configuração automática
  • se a configuração automática não puder ser usada para configurar corretamente todos os beans possíveis, use a configuração baseada em Java (que envolve a criação de objetos usando o código Java)
  • e o método de prioridade mais baixa é o método antigo — usando arquivos de configuração XML.
O Spring também nos permite combinar esses métodos. Por exemplo, deixe o Spring configurar tudo o que pode ser configurado automaticamente, use configuração baseada em Java sempre que precisar de parâmetros especiais e use XML para quaisquer configurações legadas. Isso tudo funciona para ser bastante flexível. Ainda assim, se tudo puder ser configurado automaticamente, escolha essa opção. Vou considerar apenas a configuração automática e a configuração baseada em Java. As configurações XML são usadas em quase todos os exemplos do Spring na Internet. Além do mais, depois de entender como a configuração baseada em Java funciona, você não deve ter problemas para ler um arquivo XML que faz a mesma coisa. A configuração automática é usada quando precisamos trabalhar com objetos de classes que escrevemos. Se criar um de nossos objetos requer alguma lógica muito específica, ou se não conseguirmos fazer alguma classe com a anotação necessária para configuração automática, podemos usar a configuração baseada em Java para fazer o que precisa ser feito. NoNa próxima parte , criaremos um projeto Maven, conectaremos alguns dos principais módulos Spring e criaremos nossos primeiros beans.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION