Instead of objects invoking other objects, the dependant objects are added through an external entity/container.
Also known as the Hollywood principle – “don’t call me I will call you”
Dependency injection
Dependencies are “injected” by container during runtime.
Beans define their dependencies through constructor arguments or properties
Prevents hard-coded object creation and object/service lookup.
Loose coupling
Helps write effective unit tests