Spring Notes (1)
Why Use Spring?
For decoupling!
What is decoupling?
Coupling
Refers to dependencies between programs:
- Dependencies between classes
- Dependencies between methods
Decoupling
- Reduce dependencies between programs
- Don’t depend on compile-time (error?), depend at runtime instead.
Approach
- Use reflection to create objects.
- Read configuration files to get the fully qualified class names to create.
IOC Container Details
IOC: Inversion of Control
Keywords: Factory Pattern, Singleton Pattern, Thread Safety.
- Singleton Pattern: Use static Map to share values.
Before:
UserService userService = new UserService();
After (using Spring):
UserService userService = (UserService) applicationContext.getBean("userService");
Bean Management Details
Bean Scopes
- singleton: One instance per Spring container (default)
- prototype: New instance each time requested
- request: One instance per HTTP request
- session: One instance per HTTP session
Bean Lifecycle
- Instantiation
- Population of properties
- Initialization
- Destruction
Dependency Injection
Constructor Injection
public class UserService {
private UserDao userDao;
public UserService(UserDao userDao) {
this.userDao = userDao;
}
}
Setter Injection
public class UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
}
Summary
Spring provides:
- Decoupling through IOC
- Flexible Bean management
- Multiple dependency injection methods
- AOP (Aspect-Oriented Programming) support
These features make Spring the most popular Java framework.