Типова корпоративна програма не складається з єдиного об'єкта (або біна в термінології Spring). Навіть у найпростішому додатку існує кілька об'єктів, які працюють разом, щоб створити те, що кінцевий користувач бачитиме як узгоджену цільну програму. Далі пояснюється, як перейти від визначення кількох самостійних визначень біну до повністю реалізованого додатку, в якому об'єкти взаємодіють один з одним для отримання результату.

Використання залежностей (DI) — це процес, в якому об'єкти визначають свої залежності (тобто інші об'єкти, з якими вони працюють) виключно через аргументи конструктора, аргументи фабричного методу або властивості, які встановлюються для екземпляра об'єкта після його створення чи повернення з фабричного методу. Потім контейнер впроваджує ці залежності під час створення біна. Цей процес по суті є інверсією (звідси й назва: інверсія контролю (Inversion of Control) самого біна, який самостійно контролює створення або розміщення його залежностей за допомогою прямої побудови класів або шаблону локатора служб (Service Locator).

Код стає чистішим завдяки принципу DI, а поділ — ефективніший, якщо об'єктам привласнюються свої залежності. Об'єкт не шукає свої залежності та знає місце розташування чи клас залежностей. У результаті класи стає простіше тестувати, особливо якщо залежності знаходяться на інтерфейсах або абстрактних базових класах, що дозволяє використовувати реалізації функції-заглушки (stub) або об'єкта-імітації (mock) у модульних (unit) тестах.

DI існує у двох основних варіантах: впровадження залежностей на основі конструктора та впровадження залежностей на основі сетера.