# Spring Ядро Spring Framework основнано на принципе инверсии управления (inversion of Control - IoC) ### Основа Spring Реализация DI (dependency injection) в Spring основана на двух концепциях: - JavaBean - Интерфейсы В Spring любой управляемый ресурс - это bean С помощью интерфейсов можно получить максимальную отдачу от DI бины могут использовать любую реализацию интерфейса для удовлетворения зависимости. Конфигурирование через XML или классы Java, или аннотации в коде, или через Groovy. ### Три кита Spring-приложений **Core** - обеспечивает ключевые части фреймворка, включая свойства IoC и DI. **Beans** - классы, созданием экземпляров которых и установкой в них зависимстей управляет контейрнер фреймворка Spring. **Context** построен на основе Beans и Core и позволяет получить доступ к любому объекту, который определён в настройках. Ключевым элементом модуля `Context` является интерфейс `ApplicationContext`. ```java interface Music {} class ClassicalMusic implements Music {} class RockMusic implements Music {} class MusicPlayer { private Music music; public void play() { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); // ... music = context.getBean("classicalMusic", ClassicalMusic.class); // ... music = context.getBean("rockMusic", RockMusic.class); // ... } } ```