<s>[INST] ### Cheatsheet for Guice

Here is a cheat sheet for Guice:
* Bind with Constructor: `@Inject`
* Bind with Field/Method Injection: `@Inject, @Named(value)`
* Bind with Providers: `Provider.get()`
* Bind with Factory: `Factory`
* Bind with INSTANCE Bindings: `toInstance()`
* Bind with TYPES Bindings: `to(Customer.class)`
* Singleton Scope: `@Singleton`
* Per-JVM Scope: `@Singleton` + JVM parameter
* Multiple Bindings (Multi-bindings): `@Multibind`
* Eager Loading: `asEagerSingleton()`
* Named Binding: `bind(SomeInterface.class).annotatedWith(Names.named("some-name"))`
* Private Module Bindings: `PrivateModule`
* Static Injection: `requestStaticInjection()`
* Inject with Self Binding: `bind(ClassA.class).to(ClassA.class)`
* Inject with Class Bindings: `bind(SomeInterface.class).to(ClassA.class)`
* Disable Circular Dependencies: `modulesCertificate`, `deferred` 

What are some best practice recommendations and their corresponding reasoning when using Guice?[/INST]