IGTI Blog
Spring Framework

O que o Spring pode fazer por você hoje?

Professor autor: Marcus Ricardo Aguiar

Já faz algum tempo que a linguagem Java vem ganhando notoriedade no ecossistema de Tecnologia da Informação. Muitas empresas utilizam a linguagem no desenvolvimento de seus produtos e em seus sistemas internos. Os grandes trunfos desta linguagem sempre foram sua capacidade de portabilidade e a utilização dos conceitos acerca do paradigma de programação orientado a objetos, além de possuir uma grande quantidade de APIs disponíveis.

Nos últimos tempos, muito se fala em desenvolver software sempre com muita qualidade e, principalmente, produtividade. Com isso, as linguagens tradicionais muitas vezes não são capazes, por si só, de fornecer a infraestrutura necessária para atender essa demanda. É extremamente importante trabalhar as linguagens sempre em conjunto com bibliotecas de apoio para um desenvolvimento mais produtivo. E é aí que o Spring Framework entra em cena. Um projeto extremamente bem sucedido e completo, capaz de fornecer suporte ao desenvolvimento de aplicações Java em diversos contextos. Inclusive, já existem iniciativas para expandir o uso do Spring para outras linguagens, tais como: Groovy e Kotlin.

Alguns vão dizer que o Spring Framework é uma ferramenta muito complexa e de difícil configuração. Isso pode até fazer certo sentido quando se trata das versões mais antigas da ferramenta, quando se era preciso fazer diversas configurações naqueles arquivos XML. Porém, para a minha alegria e a dos colegas desenvolvedores, agora as novas versões do Framework contam com a possibilidade de fazer toda a configuração em arquivos Java com as famosas annotations.

Esta nova abordagem de configuração facilitou, e muito, a vida dos usuários do Spring. Agora com uma simples configuração podemos criar uma arquitetura de aplicação bastante completa. Além de toda esta reestruturação do framework para facilitar a sua configuração, o Spring passou a disponibilizar duas novas ferramentas que auxiliam, e muito, um contato inicial dos desenvolvedores iniciantes com a ferramenta. São elas: Spring Initializr e Spring Boot.

A primeira corresponde a uma página na web que permite criar uma semente da aplicação a ser desenvolvida. Esta aplicação semente já será disponibilizada com toda a configuração necessária e com suas devidas dependências. A segunda ferramenta (Spring Boot) corresponde a um projeto específico do Spring que configura automaticamente uma série de questões relacionadas a infra-estrutura da aplicação.

O núcleo do Spring Framework conta com um conjunto de bibliotecas, que implementam padrões de projetos e paradigmas de programação que contribuem para um desenvolvimento com qualidade e bastante produtivo. Dois projetos base do framework são o Spring IoC e o Spring AOP que implementam a Inversão de Controle por Injeção de Dependências e a Programação Orientada a Aspectos, respectivamente.

A utilização de Injeção de Dependências permite que os objetos do sistema criem uma relação de dependência fraca, o que favorece a coesão do sistema e minimiza o acoplamento do mesmo, aumentando consideravelmente a sua qualidade. De outra forma, a utilização de Programação Orientada a Aspectos (AOP) permite criar aspectos na aplicação e, com isso, criar funcionalidades que solucionam preocupações transversais da aplicação como, por exemplo, registrar log das atividades em uma determinada aplicação.

O projeto Spring ainda disponibiliza uma série de ferramentas que trabalham em conjunto com o Spring Framework, a fim de prover uma arquitetura mais robusta e flexível para as aplicações a serem desenvolvidas. Por exemplo, para solucionar questões de autenticação e autorização de acessos às aplicações, o Spring disponibiliza o Spring Security que permite integração com bancos de dados, com servidores LDAP, entre outros.

Com esta ferramenta, podemos facilmente definir a estratégia de autenticação e autorização de acessos dos usuários ao sistema. Além disso, o Spring possui o pacote de bibliotecas OAuth, o que permite utilizar o protocolo de comunicação OAuth para fazer autenticação às aplicações a partir de outras. Por exemplo, podemos configurar nossa aplicação para autenticação via Facebook.

Já o Spring Integration fornece uma biblioteca com padrões de integração já implementados e de fácil configuração que permite realizar integração entre sistemas em diferentes contextos. Além disso, o Spring também possui pacotes específicos de outras soluções de integração, tais como: JMS e WebSocket. Desta forma, o Spring possui um suporte muito interessante para arquiteturas de integração de sistemas.

As soluções de bancos de dados do Spring também têm sido amplamente utilizadas e favorece de forma incisiva ao aumento de produtividade e performance das aplicações. O Spring Data atua como um framework de persistência ORM, enquanto o Spring Caching permite fazer caching de dados em memória para evitar consultas desnecessárias em bancos de dados.

O Spring ainda disponibiliza uma série de outras ferramentas que auxiliam a solução de problemas pontuais de infra-estrutura. Por exemplo, o Spring Web possui todo o suporte para desenvolver APIs web, o Spring Fox Swagger auxilia na geração automática de documentação de serviços HTTP e o Spring Quartz fornece uma abstração da ferramenta Quartz para a construção de funcionalidades de agendamento de tarefas. Por fim, ainda podemos citar o Spring Eureka que fornece uma arquitetura completa para se trabalhar com aplicações em micro-serviços, permitindo escalar os serviços, fazer ajustes pontuais na aplicação e garantir uma alta disponibilidade de suas aplicações.

Contudo, o projeto Spring está cada vez mais presente nas aplicações Java e atua sempre com o objetivo de garantir qualidade e produtividade ao processo de desenvolvimento. A ideia, neste caso, é fazer com que o desenvolvedor se preocupe mais com os problemas do negócio da aplicação e deixe as questões de infra-estrutura para o Spring. As soluções que este framework fornece são extremamente úteis e a comunidade é bastante atuante a fim de manter o projeto sempre atualizado. E o melhor é que não citei nem a metade das ferramentas que o Spring tem a nos oferecer. Acredito muito em aplicações que utilizam Spring como base e a recomendo sem sombra de dúvidas. Ao iniciar um projeto em Java ou em qualquer outra linguagem suportada pelo Spring, pense sempre em utilizá-lo.