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

  1. Instantiation
  2. Population of properties
  3. Initialization
  4. 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:

  1. Decoupling through IOC
  2. Flexible Bean management
  3. Multiple dependency injection methods
  4. AOP (Aspect-Oriented Programming) support

These features make Spring the most popular Java framework.