Spring Framework

From Wikipedia, the free encyclopedia
Spring Framework
Desenvolvedor(es)VMware
lançamento inicial1 de outubro de 2002 ; 20 anos atras (2002-10-01)
Versão estável
6.0.7 [1] Edite isso no Wikidata / 20 de março de 2023 ; 38 dias atrás (20 March 2023)
Repositório
Escrito emJava
PlataformaJavaEE
TipoEstrutura do aplicativo
LicençaLicença Apache 2.0
Local na rede Internetspring .io /projects /spring-framework Edite isso no Wikidata

O Spring Framework é um framework de aplicação e inversão de container de controle para a plataforma Java . Os principais recursos da estrutura podem ser usados ​​por qualquer aplicativo Java, mas há extensões para criar aplicativos da Web sobre a plataforma Java EE (Enterprise Edition). Embora a estrutura não imponha nenhum modelo de programação específico , ela se tornou popular na comunidade Java como um complemento ao modelo Enterprise JavaBeans (EJB). O Spring Framework é de código aberto .

Histórico de versões

Versão Data Notas
0,9 2003
1,0 24 de março de 2004 Primeiro lançamento de produção.
2.0 2006
3.0 2009
4.0 2013
5.0 2017
6.0 16 de novembro de 2022

A primeira versão foi escrita por Rod Johnson , que lançou a estrutura com a publicação de seu livro Expert One-on-One J2EE Design and Development em outubro de 2002. A estrutura foi lançada pela primeira vez sob a licença Apache 2.0 em junho de 2003. A primeira versão O lançamento, 1.0, foi lançado em março de 2004. [2] O framework Spring 1.2.6 ganhou um prêmio de produtividade Jolt e um prêmio de inovação JAX em 2006. [3] [4] O Spring 2.0 foi lançado em outubro de 2006, o Spring 2.5 em novembro 2007, Spring 3.0 em dezembro de 2009, Spring 3.1 em dezembro de 2011 e Spring 3.2.5 em novembro de 2013. [5]O Spring Framework 4.0 foi lançado em dezembro de 2013. [6] Melhorias notáveis ​​no Spring 4.0 incluíram suporte para Java SE (Standard Edition) 8, Groovy 2, alguns aspectos do Java EE 7 e WebSocket .

O Spring Boot 1.0 foi lançado em abril de 2014. [7]

O Spring Framework 4.2.0 foi lançado em 31 de julho de 2015 e foi imediatamente atualizado para a versão 4.2.1, lançada em 01 de setembro de 2015. [8] É "compatível com Java 6, 7 e 8, com foco em refinamentos principais e recursos modernos da Web" . [9]

O Spring Framework 4.3 foi lançado em 10 de junho de 2016 e terá suporte até 2020. [10] Ele "será a geração final dentro dos requisitos gerais do sistema Spring 4 (Java 6+, Servlet 2.5+), [...]" . [9]

O Spring 5 foi anunciado para ser construído sobre o Reactor Core compatível com o Reactive Streams . [11]

O Spring Framework 6.0 foi lançado em 16 de novembro de 2022 e veio com uma linha de base Java 17+ e uma mudança para Jakarta EE 9+ (no jakartanamespace), com foco nas APIs Jakarta EE 10 lançadas recentemente, como Servlet 6.0 e JPA 3.1 . [12]

Módulos

O Spring Framework inclui vários módulos que fornecem uma variedade de serviços:

Inversão do container de controle (injeção de dependência)

Central para o Spring Framework é seu contêiner de inversão de controle (IoC), que fornece um meio consistente de configurar e gerenciar objetos Java usando reflection . O contêiner é responsável por gerenciar os ciclos de vida de objetos específicos: criar esses objetos, chamar seus métodos de inicialização e configurar esses objetos conectando-os.

Os objetos criados pelo contêiner também são chamados de objetos gerenciados ou beans . O contêiner pode ser configurado carregando arquivos XML (Extensible Markup Language) ou detectando anotações Java específicas em classes de configuração. Essas origens de dados contêm as definições de bean que fornecem as informações necessárias para criar os beans.

Os objetos podem ser obtidos por meio de pesquisa de dependência ou injeção de dependência. [14] Pesquisa de dependência é um padrão em que um chamador solicita ao objeto container um objeto com um nome específico ou de um tipo específico. A injeção de dependência é um padrão em que o contêiner passa objetos por nome para outros objetos, por meio de construtores , propriedades ou métodos de fábrica .

Em muitos casos, não é necessário usar o contêiner ao usar outras partes do Spring Framework, embora usá-lo provavelmente torne um aplicativo mais fácil de configurar e personalizar. O contêiner Spring fornece um mecanismo consistente para configurar aplicativos e se integra a quase todos os ambientes Java, desde aplicativos de pequena escala até aplicativos corporativos de grande porte.

O contêiner pode ser transformado em um contêiner EJB (Enterprise JavaBeans) 3.0 parcialmente compatível por meio do projeto Pitchfork. Alguns [ quem? ] criticam o Spring Framework por não cumprir os padrões. [15] No entanto, SpringSource não vê a conformidade com EJB 3 como um objetivo principal e afirma que o Spring Framework e o contêiner permitem modelos de programação mais poderosos. [16] O programador não cria diretamente um objeto, mas descreve como ele deve ser criado, definindo-o no arquivo de configuração do Spring. Da mesma forma, serviços e componentes não são chamados diretamente; em vez disso, um arquivo de configuração do Spring define quais serviços e componentes devem ser chamados. Este IoC destina-se a aumentar a facilidade de manutenção e teste.

Estrutura de programação orientada a aspectos

O Spring Framework tem sua própria estrutura de programação orientada a aspectos (AOP) que modulariza preocupações transversais em aspectos . A motivação para criar uma estrutura AOP separada vem da crença de que deve ser possível fornecer recursos AOP básicos sem muita complexidade em design, implementação ou configuração. A estrutura Spring AOP também aproveita ao máximo o contêiner Spring.

A estrutura Spring AOP é baseada em padrão de proxy e é configurada no tempo de execução . Isso elimina a necessidade de uma etapa de compilação ou entrelaçamento no tempo de carregamento. Por outro lado, a interceptação permite apenas a execução de métodos públicos em objetos existentes em um ponto de junção .

Comparado com a estrutura AspectJ , o Spring AOP é menos poderoso, mas também menos complicado. O Spring 1.2 inclui suporte para configurar aspectos AspectJ no contêiner. O Spring 2.0 adicionou mais integração com o AspectJ; por exemplo, a linguagem pointcut é reutilizada e pode ser misturada com aspectos baseados em Spring AOP. Além disso, o Spring 2.0 adicionou uma biblioteca Spring Aspects que usa o AspectJ para oferecer recursos comuns do Spring, como gerenciamento declarativo de transações e injeção de dependência por meio do tempo de compilação ou do tempo de carregamento do AspectJ. SpringSource também usa AspectJ AOP em outros projetos Spring, como Spring Roo e Spring Insight, com Spring Security também oferecendo uma biblioteca de aspectos baseada em AspectJ.

O Spring AOP foi projetado para torná-lo capaz de trabalhar com preocupações transversais dentro do Spring Framework. Qualquer objeto criado e configurado pelo contêiner pode ser enriquecido usando o Spring AOP.

O Spring Framework usa Spring AOP internamente para gerenciamento de transações, segurança, acesso remoto e JMX .

Desde a versão 2.0 do framework, o Spring fornece duas abordagens para a configuração do AOP:

  • abordagem baseada em esquema [17] e
  • Estilo de anotação baseado em @AspectJ. [18]
<beans  xmlns= "http://www.springframework.org/schema/beans" 
    xmlns:mvc= "http://www.springframework.org/schema/mvc"  
    xmlns:xsi= "http://www.w3 .org/2001/XMLSchema-instance" 
    xmlns:aop= "http://www.springframework.org/schema/aop"  
    xmlns:context= "http://www.springframework.org/schema/context" 
    xsi:schemaLocation = "http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd 
        http://www.springframework.org/schema/context 
        http:/ /www.springframework.org/schema/context/spring-context.xsd 
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd 
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop. xsd" >

A equipe do Spring decidiu não introduzir uma nova terminologia relacionada ao AOP; portanto, na documentação de referência do Spring e na API, termos como aspect , join point, warning , pointcut, Introduction, target object ( adverted object ), AOP proxy e weaving têm todos os mesmos significados que na maioria das outras estruturas AOP (particularmente AspectJ ).

Estrutura de acesso a dados

A estrutura de acesso a dados do Spring aborda as dificuldades comuns que os desenvolvedores enfrentam ao trabalhar com bancos de dados em aplicativos. O suporte é fornecido para todas as estruturas populares de acesso a dados em Java: JDBC, iBatis / MyBatis , Hibernate , Java Data Objects (JDO, descontinuado desde 5.x), Jakarta Persistence API (JPA), Oracle TopLink , Apache OJB e Apache Cayenne , entre outros.

Para todas essas estruturas suportadas, o Spring fornece esses recursos

  • Gerenciamento de recursos – adquirindo e liberando recursos de banco de dados automaticamente
  • Tratamento de exceções – traduzindo exceção relacionada ao acesso a dados para uma hierarquia de acesso a dados Spring
  • Participação na transação – participação transparente nas transações em andamento
  • Desempacotamento de recursos – recuperando objetos de banco de dados de wrappers de pool de conexão
  • Abstração para manipulação de objetos grandes binários (BLOB) e objetos grandes de caracteres (CLOB)

Todos esses recursos ficam disponíveis ao usar classes de modelo fornecidas pelo Spring para cada estrutura suportada. Os críticos disseram que essas classes de modelo são intrusivas e não oferecem nenhuma vantagem sobre o uso (por exemplo) da API do Hibernate diretamente. [19] [ falha na verificação ] Em resposta, os desenvolvedores do Spring tornaram possível usar as APIs Hibernate e JPA diretamente. No entanto, isso requer gerenciamento de transação transparente, pois o código do aplicativo não assume mais a responsabilidade de obter e fechar recursos do banco de dados e não oferece suporte à conversão de exceção.

Juntamente com o gerenciamento de transações do Spring, sua estrutura de acesso a dados oferece uma abstração flexível para trabalhar com estruturas de acesso a dados. O Spring Framework não oferece uma API comum de acesso a dados; em vez disso, todo o poder das APIs suportadas é mantido intacto. O Spring Framework é o único framework disponível em Java que oferece ambientes de acesso a dados gerenciados fora de um servidor de aplicativos ou contêiner. [20]

Ao usar o Spring para gerenciamento de transações com o Hibernate, os seguintes beans podem ter que ser configurados:

  • Uma fonte de dados como com.mchange.v2.c3p0.ComboPooledDataSourceouorg.apache.commons.dbcp.BasicDataSource
  • Uma SessionFactory como org.springframework.orm.hibernate3.LocalSessionFactoryBeancom um atributo DataSource
  • Um HibernateProperties comoorg.springframework.beans.factory.config.PropertiesFactoryBean
  • Um TransactionManager como org.springframework.orm.hibernate3.HibernateTransactionManagercom um atributo SessionFactory

Outros pontos de configuração incluem:

  • Uma configuração AOP de pontos de corte.
  • Semântica de transação do conselho AOP [ esclarecer ] .

Gerenciamento de transações

A estrutura de gerenciamento de transações do Spring traz um mecanismo de abstração para a plataforma Java. Sua abstração é capaz de:

Em comparação, o Java Transaction API (JTA) suporta apenas transações aninhadas e transações globais e requer um servidor de aplicativos (e, em alguns casos, também a implantação de aplicativos em um servidor de aplicativos).

O Spring Framework envia um PlatformTransactionManager para várias estratégias de gerenciamento de transações:

  • Transações gerenciadas em uma conexão JDBC
  • Transações gerenciadas em unidades de trabalho de mapeamento objeto-relacional
  • Transações gerenciadas via JTA TransactionManager e UserTransaction
  • Transações gerenciadas em outros recursos, como bancos de dados de objetos

Além desse mecanismo de abstração, a estrutura também fornece duas maneiras de adicionar gerenciamento de transações aos aplicativos:

  • Processualmente, usando o TransactionTemplate do Spring
  • Declarativamente, usando metadados como anotações XML ou Java (@Transactional, etc.)

Junto com o framework de acesso a dados do Spring – que integra o framework de gerenciamento de transações – é possível configurar um sistema transacional por meio de configuração sem ter que depender de JTA ou EJB . A estrutura transacional também se integra com mecanismos de mensagens e cache .

Estrutura modelo-visualização-controlador

Apresentação Spring MVC/Web Reactive dada por Jürgen Höller

O Spring Framework apresenta sua própria estrutura de aplicativo da web model-view-controller (MVC) , que não foi planejada originalmente. Os desenvolvedores do Spring decidiram escrever seu próprio framework Web como uma reação ao que eles perceberam como o design pobre do (então) popular framework Jakarta Struts Web, [21] bem como deficiências em outros frameworks disponíveis. Em particular, eles sentiram que não havia separação suficiente entre as camadas de apresentação e tratamento de pedidos, e entre a camada de tratamento de pedidos e o modelo. [22]

Assim como o Struts, o Spring MVC é um framework baseado em requisições. A estrutura define interfaces de estratégia para todas as responsabilidades que devem ser tratadas por uma estrutura moderna baseada em solicitações. O objetivo de cada interface é ser simples e claro para que seja fácil para os usuários do Spring MVC escrever suas próprias implementações, se assim o desejarem. O MVC abre caminho para um código front-end mais limpo. Todas as interfaces são fortemente acopladas à API do Servlet . Esse acoplamento rígido com a API do Servlet é visto por alguns como uma falha por parte dos desenvolvedores do Spring em oferecer uma abstração de alto nível para aplicativos baseados na Web [ carece de fontes ]. No entanto, esse acoplamento garante que os recursos da API do Servlet permaneçam disponíveis para os desenvolvedores, além de oferecer uma estrutura de alta abstração para facilitar o trabalho com ela.

A classe DispatcherServlet é o front controller [23] do framework e é responsável por delegar o controle para as diversas interfaces durante as fases de execução de uma requisição HTTP .

As interfaces mais importantes definidas pelo Spring MVC, e suas responsabilidades, estão listadas abaixo:

  • Controlador: fica entre o Modelo e a Visualização para gerenciar as solicitações recebidas e redirecionar para a resposta adequada. O controlador mapeará a solicitação http para os métodos correspondentes. Ele atua como um portão que direciona as informações recebidas. Ele alterna entre entrar no modelo ou na exibição.
  • HandlerAdapter: execução de objetos que lidam com solicitações recebidas
  • HandlerInterceptor: interceptação de solicitações de entrada comparáveis, mas não iguais aos filtros Servlet (o uso é opcional e não controlado pelo DispatcherServlet).
  • HandlerMapping: selecionar objetos que lidam com solicitações recebidas (manipuladores) com base em qualquer atributo ou condição interna ou externa a essas solicitações
  • LocaleResolver: resolvendo e opcionalmente salvando a localidade de um usuário individual
  • MultipartResolver: facilite o trabalho com uploads de arquivos agrupando as solicitações recebidas
  • View: responsável por retornar uma resposta ao cliente. Algumas requisições podem ir direto para a visualização sem ir para a parte do modelo; outros podem passar por todos os três.
  • ViewResolver: selecionando uma View com base em um nome lógico para a view (o uso não é estritamente necessário)

Cada interface de estratégia acima tem uma responsabilidade importante na estrutura geral. As abstrações oferecidas por essas interfaces são poderosas, portanto, para permitir um conjunto de variações em suas implementações, o Spring MVC vem com implementações de todas essas interfaces e juntas oferecem um conjunto de recursos sobre a API do Servlet. No entanto, desenvolvedores e fornecedores são livres para escrever outras implementações. O Spring MVC usa a interface Java java.util.Mapcomo uma abstração orientada a dados para o modelo, onde as chaves devem ser valores de string.

A facilidade de testar as implementações dessas interfaces parece ser uma importante vantagem do alto nível de abstração oferecido pelo Spring MVC. O DispatcherServlet é fortemente acoplado à inversão Spring do contêiner de controle para configurar as camadas da web dos aplicativos. No entanto, os aplicativos da web podem usar outras partes do Spring Framework, incluindo o contêiner, e optar por não usar o Spring MVC.

Um fluxo de trabalho do Spring MVC

Quando um usuário clica em um link ou envia um formulário em seu navegador da Web, a solicitação vai para o Spring DispatcherServlet. DispatcherServlet é um controlador frontal no Spring MVC. Ele consulta um ou mais mapeamentos de manipulador. O DispatcherServlet escolhe um controlador apropriado e encaminha a solicitação para ele. O Controlador processa a solicitação específica e gera um resultado. É conhecido como Modelo. Essas informações precisam ser formatadas em html ou qualquer tecnologia de front-end como JSP. Esta é a Visualização de um aplicativo. Todas as informações estão no objeto MODEL And VIEW. Quando o controlador não está acoplado a uma exibição específica, o DispatcherServlet localiza o JSP real com a ajuda do ViewResolver.

Configuração do DispatcherServlet

DispatcherServlet deve ser configurado em web.xml

<servlet> 
  <servlet-name> MyServlet </servlet-name> 
  <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> 
</servlet>

<servlet-mapping> 
  <servlet-name> MyServlet </servlet-name> 
  <url-pattern> / <url-pattern> 
</servlet-mapping>

Estrutura de acesso remoto

A estrutura de acesso remoto do Spring é uma abstração para trabalhar com várias tecnologias baseadas em RPC ( chamada de procedimento remoto ) disponíveis na plataforma Java, tanto para conectividade do cliente quanto para organização de objetos em servidores. O recurso mais importante oferecido por essa estrutura é facilitar ao máximo a configuração e o uso dessas tecnologias, combinando inversão de controle e AOP.

A estrutura também fornece recuperação de falhas (reconexão automática após falha de conexão) e algumas otimizações para uso do lado do cliente de beans de sessão remota sem estado EJB .

O Spring fornece suporte para esses protocolos e produtos prontos para uso

  • Protocolos baseados em HTTP
    • Hessian : protocolo de serialização binária, de código aberto e mantido por protocolos baseados em CORBA
    • RMI (1): invocações de método usando a infraestrutura RMI ainda específica para Spring
    • RMI (2): invocações de método usando interfaces RMI em conformidade com o uso regular de RMI
    • RMI-IIOP ( CORBA ): invocações de método usando RMI-IIOP/CORBA
  • Integração do cliente Enterprise JavaBean
    • Conectividade do bean de sessão sem estado EJB local: conectando-se a beans de sessão sem estado locais
    • Conectividade de bean de sessão sem estado EJB remoto: conectando-se a beans de sessão sem estado remotos
  • SABÃO
    • Integração com a estrutura de serviços da Web Apache Axis

O Apache CXF fornece integração com o Spring Framework para exportação de objetos no estilo RPC no lado do servidor.

A configuração do cliente e do servidor para todos os protocolos e produtos de estilo RPC suportados pela estrutura de acesso remoto Spring (exceto para o suporte do Apache Axis) é configurada no contêiner Spring Core.

Existe uma implementação alternativa de código aberto (Cluster4Spring) de um subsistema de comunicação remota incluído no Spring Framework que se destina a suportar vários esquemas de comunicação remota (1-1, 1-muitos, descoberta de serviços dinâmicos)...

Desenvolvimento rápido de aplicativos de convenção sobre configuração

Spring Boot

O Spring Boot Extension é a solução de convenção sobre configuração do Spring para criar aplicativos autônomos baseados em Spring de nível de produção que você pode "simplesmente executar". [24] Ele é pré-configurado com a "visão opinativa" da equipe Spring sobre a melhor configuração e uso da plataforma Spring e bibliotecas de terceiros para que você possa começar com o mínimo de confusão. A maioria dos aplicativos Spring Boot precisa de muito pouca configuração do Spring.

Características principais:

  • Crie aplicativos Spring independentes
  • Incorpore Tomcat ou Jetty diretamente (sem necessidade de implantar arquivos WAR )
  • Forneça modelos de objeto de projeto (POMs) opinativos para simplificar sua configuração Maven/Gradle
  • Configure o Spring automaticamente sempre que possível
  • Forneça recursos prontos para produção, como métricas , verificações de integridade e configuração externa
  • Absolutamente nenhuma geração de código e nenhum requisito para configuração XML. [25]
  • Integração suave e suporta todos os padrões de integração empresarial.

SpringRoo

Spring Roo é um projeto da comunidade que fornece uma abordagem alternativa baseada em geração de código usando convenção sobre configuração para criar rapidamente aplicativos em Java . Atualmente suporta Spring Framework, Spring Security e Spring Web Flow . O Roo difere de outras estruturas de desenvolvimento rápido de aplicativos , concentrando-se em:

  • Extensibilidade (via complementos)
  • Produtividade da plataforma Java (ao contrário de outras linguagens)
  • Prevenção de bloqueio (Roo pode ser removido em poucos minutos de qualquer aplicativo)
  • Prevenção de tempo de execução (com vantagens de implantação associadas)
  • Usabilidade (particularmente por meio dos recursos do shell e padrões de uso)

Estrutura em lote

O Spring Batch é uma estrutura para processamento em lote que fornece funções reutilizáveis ​​essenciais no processamento de grandes volumes de registros, incluindo:

  • registro/rastreamento
  • gerenciamento de transações
  • estatísticas de processamento de trabalho
  • reinício do trabalho

Ele também fornece serviços e recursos técnicos mais avançados que permitirão trabalhos em lote extremamente altos e de alto desempenho por meio de otimizações e técnicas de particionamento. O Spring Batch executa uma série de tarefas; um trabalho consiste em várias etapas e cada etapa consiste em uma tarefa READ-PROCESS-WRITE ou tarefa de operação única (tasklet).

O processo "READ-PROCESS-WRITE" consiste nas seguintes etapas: "ler" os dados de um recurso ( valores separados por vírgula (CSV), XML ou banco de dados), "processá-los" e "gravá-los" em outros recursos ( CSV, XML ou banco de dados). Por exemplo, uma etapa pode ler dados de um arquivo CSV, processá-los e gravá-los no banco de dados. O Spring Batch fornece muitas classes para ler/gravar CSV, XML e banco de dados.

Para uma tarefa de operação "única" (tasklet), significa fazer apenas uma única tarefa, como limpar os recursos antes ou depois de uma etapa ser iniciada ou concluída.

As etapas podem ser encadeadas para serem executadas como um trabalho.

Estrutura de integração

Spring Integration é uma estrutura para integração de aplicativos corporativos que fornece funções reutilizáveis ​​essenciais para mensagens ou arquiteturas orientadas a eventos.

  • roteadores – roteia uma mensagem para um canal de mensagem com base nas condições
  • transformadores – converte/transforma/altera o payload da mensagem e cria uma nova mensagem com o payload transformado
  • adaptadores – para integração com outras tecnologias e sistemas (HTTP, AMQP (Advanced Message Queuing Protocol), JMS (Java Message Service), XMPP (Extensible Messaging and Presence Protocol), SMTP (Simple Mail Transfer Protocol), IMAP (Internet Message Access Protocol ), FTP (File Transfer Protocol), bem como FTPS / SFTP , sistemas de arquivos, etc.)
  • filtros – filtra uma mensagem com base em critérios. Se os critérios não forem atendidos, a mensagem será descartada.
  • ativadores de serviço – invocam uma operação em um objeto de serviço
  • gestão e auditoria

O Spring Integration suporta arquiteturas baseadas em pipe e filtro.

Vulnerabilidade do Spring4Shell

Como qualquer outro software, o Spring pode ter algumas vulnerabilidades. Um deles ( CVE - 2022-22965 ) foi nomeado "Spring4Shell", semelhante ao Log4Shell . [26]

Veja também

Referências

  1. ^ https://github.com/spring-projects/spring-framework/releases/tag/v6.0.7 .
  2. ^ "Spring Framework 1.0 final lançado" . Blog oficial do Spring Framework . 24 de março de 2014 . Recuperado em 1 de março de 2021 .
  3. ^ Vencedores Jolt 2006
  4. ^ "Jax Innovation Award Gewinner 2006" . Arquivado do original em 2009-08-17 . Recuperado 2009-08-12 .
  5. ^ "Spring Framework 3.2.5 lançado" . Site oficial da Primavera . 7 de novembro de 2013 . Acesso em 16 de outubro de 2016 .
  6. ^ "Anúncio do lançamento do Spring Framework 4.0 GA" . blog primavera. 12 de dezembro de 2013.
  7. ^ "Spring Boot v1.0.0.RELEASE" . github. com.
  8. ^ "Spring Framework 4.2 torna-se GA" . Blog da Primavera. 31 de julho de 2015.
  9. ^ a b "Spring Framework 4.2 torna-se GA" . Blog da Primavera.
  10. ^ "Atualizando para Spring Framework 5.x" . github.com .
  11. ^ "Mola reativa" . Blog da Primavera. 9 de fevereiro de 2016.
  12. ^ "Spring Framework 6.0 torna-se GA" . Blog da Primavera. 16 de novembro de 2022.
  13. ^ Documentação do Spring Framework para o Core Container
  14. ^ Qual é a diferença entre a pesquisa de dependência e a injeção de dependência - Fórum Spring . Forum.springsource.org (2009-10-28). Recuperado em 24/11/2013.
  15. ^ Primavera VS EJB3
  16. ^ "Perguntas frequentes do Pitchfork" . Recuperado 2006-06-06 .
  17. ^ Configuração XML do Spring AOP
  18. ^ Configuração de anotação AspectJ
  19. ^ Hibernar VS Primavera
  20. ^ "Spring Data JPA para Abstração de Consultas" . 6 de fevereiro de 2018 . Recuperado 2018-02-06 .
  21. ^ Introdução ao Spring Framework
  22. ^ Johnson, design e desenvolvimento J2EE um-a-um especialista, cap. 12. e outros.
  23. ^ Padrões de Arquitetura de Aplicativo Corporativo: Front Controller
  24. ^ "Bota de mola" . spring.io.
  25. ^ "Sobre o Spring Boot" . Recuperado 2020-03-18 .
  26. ^ "Spring4Shell: vulnerabilidade crítica no Spring - blog oficial da Kaspersky" .

Bibliografia

Links externos