Это означает, что класс не создает вручную экземпляры компонентов, от которых он зависит - что-то (например, контекст IoC Spring) предоставляет классу экземпляр каждого компонента, который ему нужен. Обычно это делается либо через сеттеры для каждого компонента, либо через конструктор, который принимает все эти компоненты.
В основном вместо того, чтобы класс сам выполнял ручную реализацию:
public class Foo {
private Bar bar;
public void doStuff() {
bar = new BarImplementation();
bar.doMoreStuff();
}
}
IoC внедряет панель зависимостей в Foo, поэтому, когда вы получаете объект Foo из контекста, вы знаете, что он готов к использованию.
public class Foo {
private Bar bar;
public void setBar(Bar bar) { this.bar = bar; }
public void doStuff() {
// bar's already been set by the time this is called!
bar.doMoreStuff();
}
}
Вы не создали экземпляр Bar вручную, вместо этого ваши файлы конфигурации (такие как Spring XML) установили его для вас. Кроме того, Foo больше не привязан к BarImplementation. Использование интерфейсов позволяет вставлять различные реализации, в том числе макеты, используемые для тестирования.