Spring
é um framework open source desenvolvido para a plataforma Java que usa inversão de controle
(IoC) e injeção de dependências
(DI) para facilitar o desenvolvimento de aplicações.
Este repositório contém exercícios que demonstram a utilização do Spring Framework e que cobrem os seguintes temas:
- Spring Framework
- Spring Boot
- Beans versus Components
- Scopes
- Properties Value e Configuration Properties
- ORM e JPA
- Spring Data JPA
- Conexão com Banco de Dados
- JPA Repository
A arquitetura do Spring Framework consiste em funcionalidades organizadas em quase 20 módulos
. Esses módulos são agrupados em Core Container, Data Access/Integration, Web, AOP (Aspect Oriented Programming), Instrumentation, e Test, como demonstrado no diagrama a seguir.
Inversão de controle
é o princípio de transferir o controle de objetos ou porções de um programa para um framework ou container. No Spring Framework, esse princípio é implementado por meio da interface ApplicationContext
e dos beans
.
ApplicationContext
: é a interface que representa o container de inversão de controle no Spring. É capaz de instanciar, configurar, montar e gerenciar o ciclo de vida de qualquer tipo de objeto;Beans
: são os objetos gerenciados por um container de inversão de controle como o próprio ApplicationContext ou uma de suas implementações como a WebApplicationContext.
Injeção de dependência
é uma forma especializada de inversão de controle através da qual objetos definem suas dependências apenas por argumentos de construtor, argumentos passados a um factory method ou propriedades definidas na instância de um objeto antes que ela seja construída ou retornada de um factory method. O container então busca as dependências (anotadas com @Bean
ou @Component
) correspondentes a essas definições e as injeta nelas automaticamente por meio da anotação @Autowired
.
Sem inversão de controle, os objetos são gerenciados manualmente:
Calculadora calculadora = new Calculadora();
Com inversão de controle, os objetos são gerenciados pelo container, logo, o operador new
não é utilizado:
@Autowired
Calculadora calculadora;
Quando um bean
é definido, é como se fosse uma receita para a criação de instâncias reais da classe definida. Nessa definição, é possível controlar não apenas as dependências e os valores de configuração que devem ser conectados aos objetos criados a partir dela, mas também controlar o escopo desses objetos. O Spring Framework suporta seis escopos:
Escopo | Descrição |
---|---|
singleton |
(Padrão) Apenas uma única instância do bean é criada e todas as requisições pelo bean retornam a mesma instância |
prototype |
Uma nova instância do bean é criada a cada requisição pelo bean |
request |
Uma única instância do bean é criada para o ciclo de vida de uma requisição HTTP (válido apenas em contextos WebApplicationContext cientes da web) |
session |
Uma única instância do bean é criada para o ciclo de vida de uma sessão HTTP (válido apenas em contextos WebApplicationContext cientes da web) |
application |
Uma única instância do bean é criada para o ciclo de vida de um ServletContext (válido apenas em contextos WebApplicationContext cientes da web) |
websocket |
Uma única instância do bean é criada para o ciclo de um WebSocket (válido apenas em contextos WebApplicationContext cientes da web) |
- Introduction to Spring Framework - https://docs.spring.io/spring-framework/docs/4.0.x/spring-framework-reference/html/overview.html
- Como Começar com o Spring - https://www.devmedia.com.br/exemplo/como-comecar-com-spring/73
- Introduction to the Spring IoC Container and Beans - https://docs.spring.io/spring-framework/reference/core/beans/introduction.html
- Intro to Inversion of Control and Dependency Injection with Spring - https://www.baeldung.com/inversion-control-and-dependency-injection-in-spring
- Bean Scopes - https://docs.spring.io/spring-framework/reference/core/beans/factory-scopes.html
- Quick Guide to Spring Bean Scopes - https://www.baeldung.com/spring-bean-scopes