Skip to content

Latest commit

 

History

History
161 lines (109 loc) · 7.8 KB

01.Introdução.md

File metadata and controls

161 lines (109 loc) · 7.8 KB

📚 Introdução ao Spring

Inicialmente desenvolvido para criação de aplicações web escritas em Java, e anteriormente denominado como Spring Framework, o Spring é um ecossistema de desenvolvimento para facilitar a criação de aplicações Java utilizando diversos módulos independentes com os conceitos de inversão de controle e injeção de dependências.

No início, o Spring Framework possuía diversos recursos integrados em uma mesma plataforma, porém o projeto cresceu tanto que alguns de seus recursos foram copiados por outros projetos. A partir daí, surgiu a ideia de modularizar as principais funcionalidades do Spring Framework e assim facilitar a integração com outros projetos que utilizavam outros frameworks.

Com essa modularização, surgiu o projeto Spring, composto por diversos módulos, cada um com a sua especialidade. Estes módulos podem ser utilizados em conjunto com outros ou até com Frameworks que não façam parte do ecossistema Spring.


🎮 Inversão de controle e 💉 Injeção de Dependências

Para entender os conceitos, IOC (Inversion of Control) é o processo de delegar a outro elemento o controle de quando e como um objeto deve ser criado e quando um método deve ser executado, assim, cabe a responsabilidade desse gerenciamento ao container Spring e não mais a nós.

A injeção de dependência (DI - Dependency Injection) é uma das maneiras de implementar a Inversão de controle. Com a Injeção de dependência a classe deixa de se preocupar em como resolver as suas dependências. Ela passa a manter o foco apenas no uso dos recursos para a realização da tarefa. Isso leva a uma das caracteristicas mais conhecidas quando programamos em Java: não precisamos da palavra new pois a criação passa a ser feita pela Container


Gerenciadores de dependências

No passado era preciso configurar todo o processo de construção para algumas funcionalidades, por exemplo, o acesso a dados. Com o tempo o copia e cola dessa programação se estabeleceu. Com o passar do tempo a evolução saiu da cópia de códigos para a cópia de pacotes, onde os mesmos eram implementados também manualmente. Com o tempo, esses pacotes começaram a ser muito utilizados e o gerenciamento manual impraticável. Vindo ao resgate disso, surgiram os gerenciadores de pacotes, também conhecidos como Gerenciadores de Dependências. Ferramentas que realizavam automaticamente os procedimentos que os desenvolvedores faziam manualmente. Delegando todo esse gerenciamento de dependências o desenvolvedor foca no que é mais importante, na lógica do desenvolvimento da aplicação que está sendo criada.

Atualmente o Java contém dois principais Gerenciadores de Dependências:

Maven

https://maven.apache.org/

Exemplo:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
         
    <modelVersion>4.0.0</modelVersion>
    
    <groupId>com.exemplo</groupId>
    <artifactId>meu-projeto</artifactId>
    <version>1.0-SNAPSHOT</version>
    
    <dependencies>
        <!-- Dependências do seu projeto -->
    </dependencies>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Gradle

https://gradle.org/

Exemplo:

plugins {
    id 'java'
}

repositories {
    jcenter()
}

dependencies {
    // Dependências do seu projeto
}

compileJava {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
}

🏅 Principais módulos

Como dito, o Spring possui diversos módulos independentes que incrementam e facilitam o desenvolvimento de aplicações.

Dentre os principais e mais utilizados podemos citar:

  • Spring boot: Módulo que facilita a configuração das aplicações visando reduzir as quantidades iniciais que rgeralmente são fundamentais em projetos
  • Spring Data: M´odulo que facilita a forma de acesso aos dados por parte da aplicação. Possui suporte para JDBC e JPA, por exemplo
  • Spring MVC: Permite a criação e desenvolvimento de aplicações utilizando o padrão MVC

    Model, View e Controller. Padrão arquitetural utilizado para a criação de aplicações

  • Spring Security: Responsável pela autenticação e autorização de uma aplicação
  • Spring Mobile: Facilita a criação de aplicações que também serão executadas em dispositivos móveis

Abaixo iremos falar um poquinho de alguns módulos de maneira individual


🏅 Spring Boot

Todo desenvolvedor Java sabe o quão trabalhoso é configurar uma aplicação. Uma vez que é necessário a criação de várias pastas e arquivos XML extensos e o menor dos erros pode impedir o funcionamento correto da aplicação, o que resulta em uma tremenda dor de cabeça até a identificação e correção do problema.

Dentro do ecossistema Spring temos o Spring Boot, módulo que facilita todo o trabalho de configuração

dentre as principais funcionalidades desse módulo podemos citar:

  • Criação de aplicações autossuficientes
  • Servidores web como o Tomcat, Jetty e Undertow embutidos
  • Prover starteś para gerenciamento de dependências e build
  • Configuração automática de bibliotecas
  • Funcionalidades para ambientes de produção
  • Dispensar a necessidade de configuração XMl e geração de código

Em resumo, o Spring boot já monta todo o processeo e nós, desenvolvedores, nos preocupamos em aplicar as regras e a lógica.


🏅 Spring Web MVC

O módulo que nos auxiliar no desenvolvimento de aplicações web. Com sua utilização, nós conseguimos ter a facilidade e flexibilidade para trabalhar com as requisições.

O Spring MVC é uma excelente implementação do padrão MVC. De maneira resumido MVC (Model - View - Controller) traz uma maneira de pensar na divisão das responsabilidades dividindo em camadas e separando a lógica com as regras de negócio com a camada de visualização

le já possui as principais funcionalidades que precisamos para o desenvolvimento: atender as requisições HTTP, delegar responsabilidades de processamento de dados para outros componentes e preparar as respostas HTTP.


🏅 Spring Data

Provavelmente sua aplicação terá que se conectar com banco de dados. O Spring MVC não te dá a funcionalidade para se conectar ao banco, nem realizar operações. Por isso, temos o Spring Data.

Seu módulo permite que trabalhemos com facilidade usando o banco de dados, auxiliando no nosso trabalho de persistência unificando o acesso a diferentes tecnologias como banco de dados relacionais e não relacionais

Possui vários subprojetos para o acesso em diferentes bancos, como exemplo

  • Spring Data JPA
  • Spring Data JDBC
  • Spring Data MongoDB
  • Spring Data Neo4J

🏅 Spring Security

É um módulo poderoso e customizável que fornece autenticações e controle de acesso (Autorizações) e outras funcionalidades de segurança para a nosso aplicação

Com o propósito de segurança ele traz algumas funcionalidades como:

  • Sistema de autenticação
  • Sistema de autorização
  • Proteção contra ataques como session fixation, clickjacking e cross site tequest forgery
  • Integração com a Servlet API
  • Integração opcional com o Spring Web MVC
  • Fácil instalação