Oi pessoal, neste post vou compartilhar com vocês links para uma série de conteúdos para que possamos entender os conceitos que iremos (ou já tratamos, caso você esteja no futuro) tratar no nosso primeiro encontro do grupo de Spring Framework.
Nove anos atrás publiquei uma bibliografia comentada sobre Spring Framework (Bibliografia Spring comentada - /dev/Kico), mas boa parte dos links não existe mais. Menciono o link aqui só pra que saibam que estes textos existem. Se alguém encontrar o link original, ótimo, compartilha conosco aqui, ok?
Antes uma rápida nota histórica
Acho muito interessante que vocês leiam este texto: Introduction to the Spring Framework
O autor é Rod Johnson, que é o criador original do Spring Framework: peço para que leiam com muita atenção este texto e, com a mentalidade de 2021, vejam qual assunto sequer é tratado (há apenas uma menção muito rápida)… não quero te pressionar muito a ler o texto… lá vai: o texto não fala sobre web ou REST ou desenvolvimento de APIs.
Ele fala essencialmente sobre inversão de controle, injeção de dependências, AOP. Que são o coração do Spring. O MVC não estava presente na primeira versão do framework. Pensem nisto.
Mas se você quiser REALMENTE saber a origem do Spring, leia o livro abaixo:
Este livro que ainda é atual apesar das tecnologias criticadas basicamente não mais existirem apresenta o Spring pela primeira vez. Ele é exposto em um dos últimos capítulos do livro como uma ferramenta que pode ser usada para alavancar a plataforma Java EE.
Programação Orientada a Objetos
Orientação a objetos é fundamental. É muito importante saber como modelar suas classes, quais os princípios por trás das mesmas. Sendo assim recomendo mais algum material aqui: pra começar, é importante conhecer SOLID, que é um conjunto de princípios popularizado pelo Robert C. Martin (uncle Bob).
- Como o tal do SOLID pode melhorar seus projetos orientados a objetos - Como o tal do SOLID pode melhorar seu projeto orientado a objetos - /dev/Kico - escrevi este texto em 2012 e ainda se aplica hoje (apesar de não ser mais tão fã do autor assim hoje).
Padrões de projeto
Para entender o Spring a fundo, na minha opinião você DEVE conhecer padrões de projeto. Não há como progredir muito sem conhecer alguns que são essenciais:
- Factory
- Builder
- Singleton
- Prototype
- Abstract Factory
- Strategy
Conheça-os: eles vão te dar o vocabulário que você precisa pra progredir.
A leitura pode ser muuuuuuuito tediosa pra quem está começando. Sendo assim sempre recomendo o livro de Padrões de Projetos da série Use a Cabeça também:
Estes livros não envelhecem! Se quiser ir direto à fonte, o livro original - Padrões de Projeto, de Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides - também é muito legal se você tiver paciência:
Inversão de Controle e Injeção de Dependências
Spring é em sua essência (e sempre será) um container de inversão de controle e injeção de dependências. Você DEVE entender o que é isto. Então segue algum material sobre isto.
Se quiser uma explicação em vídeo, num dia de muito tédio muito tempo atrás em casa gravei dois vídeos explicando o que são estes conceitos. O primeiro você pode ver aqui:
E o segundo gravei aqui:
Se quiser ler a respeito, eu tenho também um guia de injeção de dependências com Spring 3 (ainda se aplica às versões posteriores do Spring) que pode ser baixado no link abaixo. Uma nota histórica sobre este texto: ele é a primeira versão não oficial do meu livro “Vire o Jogo com Spring Framework”, que publiquei anos depois pela Casa do Código.
(o formulário é só pra que te avise caso este material sofra algum update no futuro)
Agora que te dei um monte de material em português cujo autor sou eu (o que, devo confessar, me soa estranho), vamos a mais algumas fontes.
The Dependency Inversion Principle - Robert C. Martin - https://web.archive.org/web/20110714224327/http://www.objectmentor.com/resources/articles/dip.pdf - leia com muita atenção este texto. Nele você vai entender princípios importantíssimos no design de projetos orientados a objetos. Mas o mais interessante sem sombra de dúvidas é a ideia de que você deve “programar para interfaces, não para implementações”.
( Inversion of Control Containers and the Dependency Injection pattern ) - Este texto do Martin Fowler de 2004 explica muito bem o que é o conceito de inversão de controle e injeção de dependências.
(Weld 4.0.0.Final - CDI Reference Implementation) - Talvez esta referência te surpreenda, mas um dos melhores textos que já li sobre inversão de controle, injeção de dependências e, principalmente, o conceito de escopo está na documentação do Weld, que, em teoria, seria uma alternativa ao Spring. Recomendo que você leia as seções de 1 a 5 deste texto.
Após esta conversa toda, já teve a curiosidade a respeito de como é possível escrever um container de IoC, tipo o Spring? Então… muitos anos atrás eu fiz isto: criei o MIOCC (Microscopic Inversion of Control Container) - foi um exercício meu cujo objetivo era criar o menor container de inversão de controle e injeção de dependências do UNIVERSO. O código fonte pode ser visto aqui: GitHub - loboweissmann/miocc: Miocc: o container de IoC/DI microscópico da itexto
(algumas pessoas chegaram a usar em produção. Funcionou? Faço a menor ideia!)
Pra finalizar o tópico “Inversão de Controle”, acho importante que a gente pense na principal aplicação do conceito, que é… o framework: Framework: você REALMENTE sabe o que é isto? - /dev/Kico
Programação Orientada a Aspectos
Inversão de Controle e Injeção de Dependências são, em si, algo realmente legal, mas na minha opinião o que realmente DIFERENCIOU o Spring foi o fato dele ter popularizado a programação orientada a aspectos.
Isto aqui foi ENORME! Foi este recurso que propiciou a implementação de recursos FENOMENAIS do Spring como, por exemplo, o gerenciamento de transações. Só ele, sozinho, já servia para substituir o EJB em aplicações mais simples.
Infelizmente AOP não é algo simples de ser aprendido. Quando escrevi o “Vire o Jogo com Spring Framework” este foi o capítulo que escreveu o livro.
Para um contato inicial então seguem algumas indicações de textos:
Programação orientada a aspecto – Wikipédia, a enciclopédia livre - O artigo da Wikipedia em português é uma boa introdução por mais incrível que pareça (preconceito meu contra a wikipedia)
( The AspectJTM Programming Guide ) - o AspectJ foi a primeira solução para a implementação de AOP. Fez MUITO sucesso, mas o Spring o eclipsou (que ironia, é um projeto da Eclipse Foundation) - a documentação do projeto explica muito bem o conceito.
Infelizmente devo mencionar aqui o capítulo 5 do meu livro “Vire o Jogo com Spring Framework” (Livro de Spring Framework - Casa do Código) - sem nenhuma modéstia digo que talvez seja a melhor coisa já escrita em português sobre o assunto em apenas 28 páginas.