Introdução ao Spring Framework
- #Spring
O Spring, é um framework de desenvolvimento de aplicativos em Java, baseado nos padrões de projeto inversão de controle e injeção de dependência. Sua estrutura é composta por módulos, a fim de reduzir a complexidade no desenvolvimento de aplicações e permitindo que você escolha quais módulos são aplicáveis a seu programa, sem ter que trazer o resto.
Alguns conceitos importantes 📚
Inversão de Controle (IoC)
Trata-se do redirecionamento do fluxo de execução de um código retirando parcialmente o controle sobre ele e delegando-o a um container. O principal propósito é minimizar o acoplamento do código.
Injeção de Dependência
Padrão de desenvolvimento que tem como finalidade manter o baixo nível de acoplamento entre os módulos de um sistema.
Beans
Objetos que são instanciados, montados e gerenciados por um container através do princípio de inversão de controle.
Scopes no contexto Spring
No Spring, scopes se referem aos escopos de instância que podem ser atribuídos aos Beans. O escopo de instância determina por quanto tempo um objeto gerenciado pelo Spring permanece ativo e disponível dentro do contexto da aplicação.
Tipos de Scope
Singleton
O container do Spring IoC define apenas uma instância do objeto. O escopo "singleton" é o escopo padrão no Spring. Quando um bean (um objeto gerenciado pelo Spring) é configurado com o escopo "singleton", apenas uma única instância desse bean é criada e compartilhada em todo o contexto da aplicação. Isso significa que, sempre que você injetar ou solicitar esse bean em qualquer parte da sua aplicação, você receberá a mesma instância do objeto. Essa instância é criada quando o contêiner Spring é inicializado e é mantida em cache para uso subsequente. Isso pode ser útil para objetos que são caros em termos de recursos ou que devem manter estado global.
Prototype
Será criado um novo objeto a cada solicitação ao container. O escopo "prototype" é o oposto do "singleton". Quando um bean é configurado com o escopo "prototype", uma nova instância é criada sempre que você solicita o bean do contêiner Spring. Isso significa que cada solicitação resulta em uma nova instância do objeto. Esse escopo é útil quando você precisa de um novo estado isolado toda vez que o objeto é injetado ou solicitado. Objetos "prototype" não são compartilhados e não são mantidos em cache.
HTTP - Request
Um bean será criado para cada requisição HTTP. Os objetos existirão enquanto a requisição estiver em execução.
HTTP - Session
Um bean será criado para a sessão de usuário. Precisamos acessar a mesma solicitação duas vezes para testar os escopos específicos para web.
HTTP - Global
Ou Application Scope, cria um bean para o ciclo de vida do contexto da aplicação. Objetos compartilhados por toda a aplicação. Enquanto aplicação estiver no ar, o bean estará disponível.
Autowired
Anotação usada para realizar a injeção de dependências de maneira automática. Injeta automaticamente objetos em um componente gerenciado pelo Spring, como um bean, eliminando a necessidade de criar manualmente instâncias desses objetos. A anotação indica onde deverá ocorrer uma injeção automática de dependência.
byName → É buscado um método **set**
que corresponde ao nome do bean.
byType → É considerado o tipo de classe para inclusão do bean.
byConstructor → Usamos o construtor para incluir a dependência.
Figuras 🖼️
Onde entra o Spring Boot…
O Spring Boot é uma biblioteca dentro do ecossistema Spring que tem como objetivo simplificar o desenvolvimento de aplicativos baseados no Spring Framework. Ele fornece uma maneira mais rápida e fácil de criar aplicativos Spring, reduzindo a quantidade de configurações.
Enquanto o Spring se baseia no padrão de injeção de dependências, o Spring Boot foca na configuração automática. Para tal, conta com os Starters, que consistem em conjuntos de dependências Maven pré-configuradas que facilitam a inicialização e eliminam a necessidade de configurar manualmente cada biblioteca e dependência necessária para um conjunto específico de funcionalidades.
Starters mais utilizados
- Spring-boot-starter-data-jpa → Integração ao banco de dados via JPA - Hibernate;
- Spring-boot-starter-data-mongodb → Interação com o bando de dados MongoDB;
- Spring-boot-starter-web → Inclusão do container Tomcat para aplicações REST;
- Spring-boot-starter-web-services → Webservices baseados na arquitetura SOAP;
- Spring-boot-starter-batch → Implementação de JOBs de processos;
- **Spring-boot-starter-**test → Disponibilização de recursos para testes unitários com JUnit;
- Spring-boot-starter-openfeign → Cliente HTTP baseado em interfaces;
- Spring-boot-starter-actuator → Gerenciamento de monitoramento da aplicação.