- Singleton (Spring default) - A single instance is created by the IoC container for the entire application lifetime.
- Prototype (Guice default) - A new instance is created whenever a value is needed.
For stateless objects the programmer can choose either Singleton or Prototype. Guice docs recommend that prototype scope be used for Stateless objects even though only a single instance should suffice really. The rationale is to optimize for speed instead since singleton scopes require synchronization for implementation and today's JVMs are good at garbage collection.