Yo! So I’ve been on this wild ride learning Java + Spring lately, and the deeper I get into Spring, the more things start to click. Last week, I focused on two core ideas: Dependency Injection (DI) and the Spring Bean Lifecycle — and trust me, these two are literally the building blocks of anything Spring does.
Here’s what I picked up — explained the way I understood it. So if you’re also just starting out with Spring, maybe this helps you connect the dots too. 🤝
📚 Resources I Used
These helped me make sense of it all:
- ▶️ YouTube Playlist: Spring Framework by Easy Programming
- 📖 Official Docs: Spring Framework Reference
- 🎓 Udemy Course: Spring 5 + Boot 2 (Navin Reddy)
- 💻 Code I Wrote: GitHub - Spring Code Repo
- ✍️ Full Hashnode Article: What I Found While Starting Spring
⚙️ Dependency Injection (DI)
So this one is like the "engine" behind how Spring manages objects (aka beans). Instead of you manually wiring dependencies using new, Spring handles that automatically.
Here are the types I learned:
💉 Constructor Injection
This is when dependencies are provided through the constructor.
@Component
public class Car {
private final Engine engine;
@Autowired
public Car(Engine engine) {
this.engine = engine;
}
}
✅ Great for making fields final (i.e., you can’t forget to inject something).
🔧 Setter Injection
Here, Spring uses setters to inject dependencies.
@Component
public class Car {
private Engine engine;
@Autowired
public void setEngine(Engine engine) {
this.engine = engine;
}
}
✅ Useful when the dependency is optional or might change after instantiation.
🤔 Which one should you use?
From what I gathered: Constructor Injection is usually preferred, because it makes dependencies mandatory and easier to test.
🌱 Spring Bean Lifecycle (Simple Breakdown)
Alright, so Spring manages your classes as beans, and every bean goes through a lifecycle managed by the container. Here’s the flow I understood:
- Instantiation — Object is created
- Populate Properties — Dependencies are injected
- Initialization — Bean is ready to use
- Destruction — Cleanup time (when context is closed)
Now, how do you hook into this lifecycle?
🛠️ @PostConstruct and @PreDestroy
@Component
public class MyBean {
@PostConstruct
public void init() {
System.out.println("Bean is initialized!");
}
@PreDestroy
public void destroy() {
System.out.println("Bean is about to be destroyed!");
}
}
These annotations come from javax.annotation and they’re super handy for running some setup or cleanup code automatically.
🧾 init-method and destroy-method in XML or Java Config
If you're not using annotations, you can also declare init/destroy methods in config:
@Bean(initMethod = "init", destroyMethod = "cleanup")
public MyBean myBean() {
return new MyBean();
}
Spring will call init() after bean creation and cleanup() before destroying the bean.
🧠 Why Does This Matter?
At first, it felt like “meh, just lifecycle stuff,” but when you start writing real-world Spring applications, this helps in:
- Managing DB connections
- Releasing resources (files, sockets, etc.)
- Initializing third-party libraries
- Prepping beans before use
Spring gives you full control without the chaos — and once you know this flow, building apps gets way smoother.
🚧 What I’ll Learn Next
I'm still in the early phase, so next up I’ll be:
- Deep diving into annotation-based configuration
- Exploring
@ComponentScan,@Configuration,@Bean - And then eventually getting my hands dirty with Spring Boot! 🧪
🧾 All My Practice Code
👨💻 GitHub: Spring Framework Related Codes
Feel free to explore and suggest improvements — I'm learning as I go!
🥜 In a nutshell (TL;DR)
- Spring handles dependencies using Dependency Injection (DI) — either via constructors or setters.
- Beans have a lifecycle: they’re created, initialized, and eventually destroyed.
- You can tap into lifecycle events using:
-
@PostConstructfor setup -
@PreDestroyfor cleanup
-
- Alternative config styles include
init-methodanddestroy-method. - Understanding the bean lifecycle helps in managing resources and building more maintainable apps.
That’s it from my side for now. Spring is huge, but breaking it down into bite-sized parts like this is helping me stay on track. If you're also learning Spring or Java, let's connect and grow together 🚀
Top comments (0)