Что такое IoC? Как это используется в Spring?



IoC
- один из принципов ООП. Расшифровывается как Inversion of Control и дает нам возможность просто описать класс, не заботясь о его инициализации. Иными словами - мы создаем классы, отдаем эти класс под управление системой, а система уже сама создает экземпляры этого класса и сама решает какой экземпляр и где его использовать.



Например, мы описываем класс, помечаем его аннотацией и далее уже можем его использовать в том или ином контексте, не озадачиваясь тем что нам еще необходимо его правильно проинициализировать, либо этот класс должен быть singlton, либо еще чем то. Мы просто его используем. И все.



Spring использует IoC-контейнер для инициализации классов, контроля за их использованием. Когда мы помечаем один из классов как
@Service мы "отдаем" этот самый класс под власть Spring и дальше сам Spring будет отвечать за создание экземпляра этого класса и внедрение этого самого экземпляра в нужном месте.