Contexto
Um sistema simples para cálculo do valor total de um pedido, considerando desconto e frete, onde cada responsabilidade é isolada em um componente.
A ideia central é aplicar conceitos de injeção de dependência e inversão de controle de forma prática através do Spring Boot, buscando entender a proposta do framework para aplicar estes conceitos, assim como comparar com implementações mais básicas dos conceitos (indiretamente através do repositório de práticas citado mais à frente).
Ao utilizar o framework, observei que esses conceitos são tratados como pilares do seu funcionamento. A partir do uso de annotations e como núcleo do framework, grande parte do “wiring” entre componentes é abstraída do desenvolvedor, reduzindo código explícito e favorecendo organização, segurança estrutural e produtividade.

O que explorei
Aplicações escaláveis e manuteníveis de longo prazo precisam de uma boa organização quanto à criação e consumo de componentes, regras e recursos, e nisso pode-se aplicar a injeção de dependências e inversão de controle.
Durante práticas de como resolver problemas e aplicar conceitos como este sobre: Injeção de Dependência(com Java Puro), geralmente coloco neste repositório de prática AQUI, onde realizo o processo do modo mais simples e “roots” até alcançar a implementação com Frameworks que abstraem implementações e resolvem problemas visando produtividade.
Foi aplicado neste projeto a criação de componente Spring e observando como a aplicação os consome.
Foi possível ainda aplicar a separação explícita de responsabilidades entre cálculos (pedido e frete). Para explorar esses temas, foquei na estrutura da aplicação com Spring com interface de uso via linha de comando.
Problema / motivação
Sistemas simples já possuem mais de uma responsabilidade, mesmo antes de envolver banco de dados, APIs, etc., e a partir disso:
- Explorar como o Spring resolve dependência entre componentes;
- Entender como aplicar os conceitos programando-os utilizando o Spring Boot;
- Visualizar por meio de um caso pequeno como a separação de serviços aumenta a clareza e organização;
- Visualizar de maneira simples temas como Injeção de Dependência e Inversão de Controle, que são pilares fundamentais e que juntos formam a base de como o framework funciona;
Recursos utilizados
- Java 17
- Spring Boot
- Annotations do Framework como:
@Serviceou@Component@Autowired
- Injeção de dependência por construtor (ver link mencionado anteriormente)
- Uso e log de retorno da aplicação através do terminal utilizando a interface
CommandLineRunner
Continuidade
Entre o repositório de prática base mencionado anteriormente e este microprojeto, foi possível visualizar e comparar injeção de dependência via construtor, por campo e annotation, o que permite ter como próximos passos do tema:
- A exploração sobre o uso de
@Primarye@Qualifierpara resolução de dependências; - Adição de testes para observar o impacto da injeção de dependências na testabilidade;
- Análise com container e ApplicationContext com maior profundidade, analisando bootstrap do Spring Boot e Auto-configuration.
Impressões e aprendizados
Observei que, de fato, a injeção de dependência força clareza de responsabilidade desde o início e o framework simplifica sua prática através de suas annotations, minimizando código boilerplate.
Percebi que há a necessidade de práticas como esta, que gerou este microprojeto, que podem ser necessárias para quem está iniciando no uso do framework, para haver entendimento conceitual e não parecer que o framework está fazendo mágica ou ter dificuldades futuras em diagnóstico e resolução de bugs em uma aplicação.
Observei também que injeção de dependência por construtor é visível e mais fácil de raciocinar.
Este microprojeto mostra ainda que arquitetura aparece antes de web, banco, persistência ou projetos grandes e que mesmo em projetos pequenos não há justificativa para evitar a separação de dependências ou aproveitar o ganho de produtividade que o framework pode oferecer mesmo para projetos menores.
Observação final
Este microprojeto não foi criado para ensinar Spring Boot, ensinar cálculos de negócio, ele visa trazer clareza e demonstrar estrutura e composição, estabelecendo ainda uma base mental para o entendimento, criação e uso de controllers, services, repositories, testes e arquitetura futura.
O experimento visa tornar fundamentos sólidos e claros para evitar mal uso do framework.
📂 Repositório do Projeto
A implementação do microprojeto está disponível no repositório:
🔗 https://github.com/rafael-o-cunha/microprojeto_01_java_e_spring_boot
#written_by_human
