Olá! No momento, a direção de desenvolvimento mais popular para um desenvolvedor com conhecimento de Java é o desenvolvimento web. Claro que para esta especialidade existe uma lista de tecnologias necessárias para estudar. Um dos principais é a Primavera . Você pode argumentar que, em vez disso, você pode aprender Java EE . É claro que isso é verdade, mas agora a grande maioria dos novos projetos usa Spring , o que o tornou praticamente a tecnologia padrão e obrigatória para um desenvolvedor web Java. E se quiser acompanhar as necessidades do mercado, terá que estudá-lo. Hoje eu gostaria de falar sobre Spring , ou seja, expandir um pouco sua visão sobre ele: falar sobre a história de sua criação, as principais diferenças da pilha Java EE e dar uma breve visão geral dos principais componentes da pilha Spring . Vamos começar!
1. Como e quando a Primavera apareceu e em que evoluiu ao longo do tempo
Tudo começou em outubro de 2002 , quando Rod Johnson escreveu o livro “Expert One-onOne J2EE Design and Development”: Neste livro, publicado pela Wrox , o autor descreve o estado do desenvolvimento Java empresarial naquela época e aponta uma série de deficiências dos ambientes Java EE e (Enterprise Java Bean)EJB . Ao mesmo tempo, Rod Johnson propõe uma solução mais simples baseada em classes Java regulares (POJO - objetos Java simples e antigos) e injeção de dependência. No livro, ele explica como você pode criar um aplicativo de reservas on-line escalável e de alta qualidade sem usar EJB. Aqueles. ele demonstrou claramente como remover a complexidade do desenvolvimento de aplicações e tornar possível usar JavaBeans simples para alcançar tudo o que antes só era possível usando EJBs. No entanto, o escopo do Spring não se limita ao desenvolvimento de componentes de software executados no lado do servidor. Qualquer aplicação Java pode aproveitar as vantagens da estrutura em termos de simplicidade, testabilidade e baixo acoplamento. Seu projeto de desenvolvimento J2EE se tornou um sucesso instantâneo. Grande parte do código do aplicativo, fornecido gratuitamente como parte do livro, era reutilizável, e vários desenvolvedores logo começaram a usá-lo em seus projetos. Wrox tinha uma página web para o livro com o código-fonte e patches. Eles também forneceram um fórum online para o livro. Em fevereiro de 2003, os desenvolvedores Jürgen Heller e Jann Karoff convenceram Rod Johnson a criar um projeto de código aberto baseado no código do framework. A partir desse momento, Rod, Jurgen e Yann iniciaram a colaboração para criar algo completamente novo. Na verdade, foi Yann Karoff quem criou o nome “Spring” para a nova estrutura. O que quis dizer aqui é que a primavera é como a primavera: um novo começo após o “inverno” do J2EE tradicional.
Em junho de 2003, o Spring 0.9 foi lançado sob a licença Apache 2.0.
A primavera 1.0 foi lançada em março de 2004. Curiosamente, mesmo antes do lançamento do Spring 1.0, a versão anterior 0.9 foi muito bem recebida e amplamente adotada.
Em agosto de 2004, Rod Johnson, Jürgen Heller, Keith Donald e Colin Sampaleanu co-fundaram a interface21 , uma empresa de consultoria, treinamento e suporte Spring.
Outubro de 2006: O Spring 2.0 é lançado, o que simplifica os arquivos de configuração XML.
Spring 2.5, lançado em novembro de 2007, introduziu configurações de anotação.
Spring 3.2, lançado em dezembro de 2012, introduziu a configuração Java, suportava Java 7, Hibernate 4, Servlet 3.0 e também exigia pelo menos Java 1.5.
Yann Karoff deixou o time logo no início. Rod Johnson deixou a equipe de primavera em 2012. Jürgen Heller ainda é um membro ativo da equipe de desenvolvimento do Spring.
Spring 4.0, lançado em 2014, adicionou suporte para Java 8.
Também em 2014, o Spring Boot foi apresentado ao mundo.
A primavera 5.0 foi lançada em 2017. Como Spring Boot 2.x, que suporta Spring 5.
Na verdade, foi assim que nosso framework favorito se tornou o que conhecemos agora.
2. Primavera versus Java EE
Vamos fazer uma pequena comparação de duas pilhas Java importantes para desenvolvedores web: Spring e Java EE.
JavaEE
Vantagens
Imperfeições
Aplicações escritas em Java EE são consideradas mais confiáveis, seguras e escaláveis
Java EE é um padrão de API aprovado pela indústria
Baseado principalmente em anotações e CDI (injeção de contexto e dependência), assim como Spring
Implementação baseada em containers EJB e POJOs
Aplicações complexas com grande número de transações são muito bem tratadas pelo JEE
Uso bem-sucedido para um aplicativo monolítico escalável
Java EE possui sua própria linguagem OOP contendo um estilo e sintaxe específicos
Um ambiente de desenvolvimento de aplicativos muito complexo e difícil de entender para iniciantes (e às vezes também para idosos)
O custo final do projeto, incluindo design, implantação e desenvolvimento de aplicativos, pode ser proibitivo
O Java EE, licenciado pela Oracle, foi projetado para organizações e empresas que exigem um ambiente amplamente adaptável e distribuível para a construção de aplicativos para o mercado de massa. Assim como o Spring, Java EE inclui bibliotecas adicionais para acesso a banco de dados (JDBC, JPA), invocação de engenharia remota (RMI), informações (JMS), administração web, processamento XML e caracteriza APIs padrão para JavaBeans corporativos, portlets, Servlets, Java Server Pages, etc. O objetivo fundamental do Java EE é desvendar os principais problemas enfrentados pelos desenvolvedores em relação à construção de aplicativos atuais usando várias APIs. Ao mesmo tempo, o desenvolvimento em Java EE possui um alto nível de complexidade, o que eleva a fasquia proibitivamente alta não apenas para iniciantes. E pode ser difícil para especialistas experientes entender a funcionalidade já escrita, portanto, o desenvolvimento em Java EE leva mais tempo e, conseqüentemente, é mais caro. Sobre Java EE em poucas palavras podemos dizer o seguinte: Complexo, mas flexível. Bom, agora vamos falar um pouco sobre Spring .
Primavera
Vantagens
Imperfeições
Permite que você organize efetivamente as interações entre objetos
Mais simples que Java EE
Implementado com base em IOC e AOP , o que garante baixo acoplamento de aplicações
Funciona com base em XML, Groovy ou configuração de anotação
Permite que você use objetos Java simples e antigos - POJOs, os desenvolvedores não precisam de um contêiner corporativo como um servidor de aplicativos
Fornece aos desenvolvedores Java um alto nível de modularidade
Fornece implementações de bibliotecas Java EE, mas de uma maneira própria, facilitando muito seu uso
Licença de código aberto
Spring Boot simplifica muito a configuração inicial do aplicativo
O código do aplicativo Spring geralmente é fácil de testar
A primavera é relativamente difícil de desenvolver porque falta um foco claro
Para um novo desenvolvedor Java, aprender o framework Spring pode ser desafiador (mas ainda mais fácil do que Java EE)
Spring é mais lento que Java EE
Spring é uma estrutura Java de código aberto para grandes empresas. A estrutura Spring visa fornecer a implementação mais simples possível de ideias J2EE e alavancar excelentes práticas de programação, ampliando os recursos do modelo de programação baseado em POJO. Aqueles. Java EE é mais um padrão oficial, enquanto Spring é mais uma estrutura que implementa esse padrão à sua maneira.
Resultados de comparação
No meu entendimento, Java EE e Spring são como JDBC e Hibernate, onde JDBC é uma tecnologia mais rápida, mas ao mesmo tempo com muito código desnecessário. E o Hibernate já utiliza JDBC, mas ao mesmo tempo simplifica e reduz significativamente o desenvolvimento (embora imponha algumas restrições). É impossível dizer com certeza qual deles é melhor. Isso também lembra um pouco a pergunta: o que é melhor - ArrayList ou LinkedList. Afinal, a resposta será a mesma – dependendo da situação. Cada um deles tem seus pontos fortes e fracos, e você precisa escolhê-los com cuidado, pesando sua situação e entendendo qual deles trará mais benefícios agora.
3. Componentes da mola
Bom, agora vamos falar um pouco sobre os frameworks que compõem o Spring.
Estrutura de primavera
É o módulo principal que fornece um modelo abrangente de programação e configuração para aplicativos empresariais modernos baseados em Java — em qualquer plataforma de implantação. Ele contém muitas das principais tecnologias Spring :
JDBC , ORM - tecnologias para interação com bancos de dados;
Teste – funcionalidade para testes transparentes e descomplicados de dados de contêineres Spring;
SpEL - Linguagem de Expressão Spring - Linguagem de expressão Spring;
etc.
Bota Primavera
Simplifica a criação de aplicativos baseados em Spring , minimizando a configuração inicial do aplicativo e configurando automaticamente os elementos do aplicativo Spring. Exemplo de inicialização do Spring em 5 minutos
Dados da Primavera
Simplifica significativamente o uso de tecnologias de acesso a dados, bancos de dados relacionais e não relacionais (remove códigos repetitivos e simplifica a interação com os dados). Este artigo contém um bom tutorial sobre como conectar Spring Data.
Nuvem de primavera
É utilizado na arquitetura de microsserviços, simplificando a interação dos microsserviços entre si e automatizando a implantação de aplicações em plataformas de nuvem como AWS , Azure , etc. Veja aqui um tutorial detalhado sobre Spring Cloud , mas já aviso que esse tema não é fácil e é voltado para especialistas próximos ao nível sênior.
Segurança Primavera
Fornece uma ferramenta poderosa e personalizável de autenticação (autenticação) e controle de acesso (autorização) para um aplicativo. Você pode encontrar um exemplo simples de como conectar o Spring Security ao seu aplicativo nesta postagem .
Primavera GraphQL
Este módulo fornece suporte para aplicativos Spring desenvolvidos em GraphQL Java. GraphQL é uma linguagem de consulta para APIs que permite aos clientes consultar um conjunto limitado de dados de que precisam, o que, por sua vez, permite que os dados sejam coletados em um número limitado de consultas. Se você já conhece JPA, já deve ter se deparado com o EntityGraph, com um conceito semelhante (ou igual). Você pode ler mais sobre GraphQL aqui .
Sessão de Primavera
Esta parte da estrutura Spring fornece APIs e implementações para gerenciar informações de sessão do usuário (os dados da sessão do usuário são armazenados em armazenamento persistente como Redis , MongoDb , HazelCast , etc.). Um exemplo de uso do Spring Session pode ser encontrado aqui .
Integração Primavera
Este módulo foi projetado para simplificar o envio de mensagens em aplicativos baseados em Spring e oferecer suporte à integração com sistemas externos por meio de adaptadores declarativos. Esses adaptadores fornecem um nível mais alto de abstração do que o suporte do Spring para comunicação remota, mensagens e agendamento. Artigo detalhado .
Primavera REST
Fornece um rico conjunto de ferramentas que simplificam o desenvolvimento da API REST: ferramentas para rotear solicitações, para converter JSON/XML em objetos dos tipos necessários, etc. Um exemplo de serviço RESTful no Spring pode ser encontrado neste material .
Fluxo da Web da Primavera
Spring Web Flow é baseado em Spring MVC e permite implementar "fluxos" de uma aplicação web. Esses fluxos encapsulam uma sequência de etapas que orientam o usuário na conclusão de alguma tarefa de negócios. Eles abrangem várias solicitações HTTP, têm estado, funcionam com dados transacionais, são reutilizáveis e podem ser dinâmicos e duráveis por natureza. Um exemplo de conexão do Spring Web Flow pode ser visto neste guia em inglês .
Serviços Web Spring
Este módulo foi projetado para facilitar o desenvolvimento de serviços SOAP baseados em contrato, permitindo que você crie serviços da Web flexíveis usando uma das muitas maneiras de manipular cargas XML. SOAP - Simple Object Access Protocol - Protocolo simples de acesso a objetos.
O módulo fornece algumas APIs para facilitar a criação de controladores REST que seguem o princípio HATEOAS ao trabalhar com Spring e especialmente Spring MVC. HATEOAS - Hipermídia como motor do estado da aplicação - Hipermídia como motor do estado da aplicação. Você pode ver o uso desta biblioteca Spring aqui .
Lote Primavera
Este módulo oferece funcionalidade para processamento de dados em lote (quando os dados são processados em grandes pedaços - lotes), vitais para o funcionamento diário dos sistemas corporativos. Spring Batch fornece recursos reutilizáveis que são necessários para lidar com grandes volumes de registros, incluindo registro/rastreamento, gerenciamento de transações, estatísticas de processamento de trabalhos, reinicialização de trabalhos, saltos e gerenciamento de recursos. Você pode encontrar uma visão geral interessante do Spring Batch neste link .
Primavera AMQP
O módulo aplica os principais conceitos do Spring ao desenvolvimento de soluções de mensagens baseadas em AMQP. Ele fornece um modelo como abstração de alto nível para envio e recebimento de mensagens. Ele também fornece suporte para POJOs acionados por mensagens com um contêiner de ouvinte. AMQP - Protocolo avançado de enfileiramento de mensagens - Protocolo avançado de enfileiramento de mensagens. O projeto contém duas partes: spring-amqp é a abstração base e spring-rabbit é a implementação do RabbitMQ . Exemplo com conexão RabbitMQ usando Spring
Primavera para Apache Kafka
Este projeto aplica os principais conceitos do Spring ao desenvolvimento de soluções de mensagens baseadas em Kafka . Um modelo é fornecido como uma abstração de alto nível para envio de mensagens. Ele também fornece suporte para POJOs acionados por mensagens com as anotações necessárias e um contêiner de ouvinte. Há uma clara semelhança aqui com Spring AMQP, mas este módulo é adaptado especificamente para Kafka. Um exemplo de conexão do Spring Kafka pode ser visto aqui .
Primavera CredHub
Fornece suporte do lado do cliente para armazenar, recuperar e excluir credenciais de um servidor CredHub em execução na plataforma Cloud Foundry . CredHub – Fornece uma API para armazenar, criar, recuperar e excluir com segurança vários tipos de credenciais. Spring CredHub fornece uma ligação Java para a API CredHub, facilitando a integração de aplicativos Spring com CredHub.
Primavera FLO
É uma biblioteca JavaScript que oferece um designer visual simples incorporável em HTML5 para pipelines e gráficos simples para monitorar streaming e dados em lote. Uma demonstração dessa tecnologia está no vídeo do link .
Primavera LDAP
Esta biblioteca simplifica as operações LDAP e é baseada no Spring JdbcTemplate. A estrutura permite pesquisar e fechar contexto, visualizar resultados, codificar/decodificar valores, filtros e muito mais (construído nos mesmos princípios do Spring Jdbc). Um exemplo de implementação do Spring LDAP pode ser encontrado aqui .
Primavera Roo
Este módulo fornece uma ferramenta RAD que pode criar e gerenciar seu aplicativo baseado em Spring. Seu objetivo é melhorar a produtividade dos desenvolvedores Java. Ele não pode escrever a lógica de negócios do seu aplicativo, mas pode lidar com questões de configuração e infraestrutura.
A biblioteca facilita a criação de um aplicativo shell completo (também conhecido como linha de comando), contando com jars do Spring Shell e adicionando seus próprios comandos (que vêm como métodos nos beans Spring). Criar um aplicativo de linha de comando pode ser útil, por exemplo, para interagir com a API REST do seu projeto ou para trabalhar com conteúdo de arquivo local. Leia mais aqui e aqui .
Máquina de Estado da Primavera
Este módulo permite que desenvolvedores de aplicativos usem conceitos de máquina de estado com aplicativos Spring. Um exemplo detalhado do uso desta funcionalidade pode ser encontrado aqui e aqui .
Cofre de Primavera
Spring Vault fornece abstrações familiares do Spring e suporte do lado do cliente para acessar, armazenar e revogar segredos. Ele oferece abstrações de baixo e alto nível para interagir com o Vault , liberando o usuário de preocupações com infraestrutura. Exemplo de implementação do Spring Vault “Preciso aprender tudo isso?” - você pergunta surpreso. Não tenha medo! Isto está errado! Mais precisamente, não é bem assim. Esta foi a lista completa de tecnologias disponíveis no Spring. A lista de tecnologias que um iniciante precisa conhecer é bem mais modesta:
Núcleo da Primavera
Bota Primavera
SpringWeb (MVC e REST)
Dados Spring (Spring ORM, Spring JDBC, Spring JPA)
Teste de Primavera
Existem também outras tecnologias que são frequentemente encontradas em projetos, mas devido à sua complexidade, são geralmente tratadas por desenvolvedores mais experientes, em vez de novatos verdes. No entanto, também é útil para iniciantes ter pelo menos uma compreensão geral de:
Segurança Primavera
Primavera AOP
Nuvem de primavera
Outras tecnologias são usadas com muito menos frequência, então você só precisa estudá-las seriamente para trabalhar em um projeto específico. A propósito, você pode encontrar uma lista completa do que um desenvolvedor Java deve saber em meu outro artigo. Isso é tudo para mim hoje, até breve!
GO TO FULL VERSION