С чего начать изучение spring framework

Обновлено: 04.07.2024

Сам курс включил в себя 144 видеоурока. В нашем обзоре мы пройдемся по ключевым моментам, а в конце статьи приложим плейлист со всеми видео.

Курс начинается с определения фреймворка как универсального инструмента с открытым исходным кодом. Основная цель Spring – разгрузка кода и упрощение разработки на Java.

Очень сложно найти нормальное определение наиболее значимых структурных элементов данного фреймворка, поскольку он обладает действительно широким функционалом. Но в первом уроке несколькими схемами представлены основные возможности, что значительно облегчает понимание.

Вступительная лирика позади, и второй урок готовит нас к:

  • Установке Eclipse
  • Установке Maven
  • Установке Spring
  • Созданию тестового проекта

Возможно, поклонникам более современных IDE Eclipse покажется дикостью, но в работе будет использоваться именно эта среда.

Чтобы ознакомиться с Maven, нужно немного отвлечься от основного курса и посмотреть данное видео:

Первый пример подробно разбирается уже в пятом видеоуроке. План состоит в переводе проектов на Spring, настройке контейнера, связывании объектов и конфигурации XML.

Начало видео оснащено основной терминологией, которая поможет корректно воспринять информацию не только из пятого, но и из последующих уроков.

Начало традиционно вобрало в себя необходимую терминологию и принципы работы каждого элемента. Рассмотрены области действия компонентов Singleton и Prototype, ряд методов, интерфейсов, а также ленивая инициализация (параметр lazy-init).

В конце первой части десятого урока дается домашнее задание, а во второй производится его разбор.

Далее ряд видеоуроков посвящается внедрению методов, коллекциям, SpEL, автоматическому связыванию и аннотациям.

А вот и более практическая часть, которая призвана закрепить всю теорию, которая была изложена ранее. Это разбор учебного проекта от IBM + анализ связки Swing и Spring IoC. Вы увидите, насколько более удобно писать "формы" с использованием Spring, а не только на чистом Swing. Любителям создавать качественные UI будет особенно интересно.

Spring для начинающих не может обойтись без понимания аспектно-ориентированного программирования, поэтому данной теме полностью посвящено 3 урока. Первый урок – чистая теория:

Второй показывает на практике, как работают аспекты, и для чего они нужны:

Третий урок, основываясь на предыдущих двух, дополняет теоретическую часть по AOP:

Раскрытие вопросов, как умеет Spring работать с базами данных, и почему его так часто выбирают для работы с БД. Этот универсальный фреймворк может работать с разными типами подключения к данным. Из наиболее часто используемых это:

Подробно объясняются преимущества и недостатки каждого инструмента, что особенно удобно, если вы новичок в работе с БД и понятия не имеете, с чем "сотрудничает" Spring.

Будьте готовы к тому, что после теоретических частей обязательно следует практика, либо возвращающая к уже существующим приложениям, либо ссылающаяся на новые. Это большой плюс курса.

Урок 37 был посвящен транзакциям, и перед более основательным углублением в вопрос автор предлагает немного усовершенствовать проект, усложнить его, подготовив таким образом к дальнейшим действиям.

Тот момент, когда Spring для начинающих обретает более серьезный вид. В 39 уроке рассмотрено добавление в приложение транзакций. Да, это представлено в самом простом варианте, но практика хорошая.

Немаловажный урок, без которого пришлось бы разбираться во всем строго самостоятельно. Это подготовительный этап перед переходом к изучению MVC.

План урока включает сравнение контекста веб-приложения и контекста Spring, создание Spring MVC приложения, в котором используется плагин Eclipse, структуру проекта и рассмотрение библиотеки Log4J.

После разбора MVC, его структуры и тестового проекта есть смысл проанализировать подключение таблицы стилей в проект, так как данный вопрос нередко вызывает затруднения у новичков.

Передача параметров формы на основе уже имеющихся знаний. В этом уроке вы научитесь передавать имя и пароль пользователя, создадите контроллер, разберете объект ModelAndView, аннотацию @ModelAttribute и теги Spring для создания формы. В конце урока дается домашнее задание по теме.

В оставшейся части курса разбираются дополнительные инструменты, объекты, параметры, локализация, AJAX-запросы, JSF, etc. 66-ой урок – последний в первой части курса. Остальные посвящены Spring с использованием IntelliJ IDEA, GlassFish, MySQL, Hibernate и многого другого. Полный видеокурс вы найдете здесь:

Учебное пособие по Spring Framework

Изучение

Несмотря на то, что Spring Framework часто забывают как устаревший, он по-прежнему остается популярным инструментом разработки приложений, которым пользуются корпоративные компании по всему миру. Spring предлагает беспрецедентный контроль, первоклассную безопасность и экономящую время систему зависимостей с использованием Spring Beans.

Тем не менее, Spring, как известно, труден для изучения из-за большого количества опций и сложного набора инструментов.

Сегодня мы поможем вам начать свой путь разработки Spring с учебника для начинающих о том, как и зачем использовать Spring. В конце концов, мы даже поможем вам начать работу над вашим первым весенним портфельным проектом.

Что такое Spring Framework?

Spring — это легкая среда разработки приложений с открытым исходным кодом, использующая Java Enterprise Edition (Java EE) и модель Enterprise JavaBeans (EJB).

Spring часто называют «фреймворком», потому что он поддерживает другие интегрированные фреймворки в экосистеме Java, такие как Struts, Hibernate и Tapestry. Spring поставляется во многих вариантах, которые адаптированы для конкретных целей, таких как Spring MVC, Spring Boot или Spring Security.

Spring известен своими системами внедрения зависимостей и инверсии управления (IoC), которые позволяют с легкостью создавать крупномасштабные слабосвязанные приложения. Spring особенно подходит для финансовых и корпоративных приложений благодаря своей скорости, безопасности и простоте построения транзакционных систем. Ведущими работодателями разработчиков Spring являются Citibank, eBay, Visa и JP Morgan.

В целом Spring Framework позволяет создавать приложения масштаба предприятия, которые являются безопасными и могут автоматически обрабатывать низкоуровневые функции, такие как поддержание жизненных циклов контейнеров и управление зависимостями.

Преимущества Spring

  • Обычный старый объект Java (POJO) : приложения Spring просто используют обычные объекты Java, а не серверы или корпоративные контейнеры. Это делает приложения более легкими.
  • Модульность IoC и MVC позволяют повторно использовать компоненты в вашем приложении без ручного управления зависимостями каждого из них.
  • Сильная поддержка экосистемы Java : Spring новаторски использует уже существующие технологии, такие как ORM-фреймворки, JEE и таймеры JDK.
  • Масштабируемые транзакции : Spring предлагает последовательный, масштабируемый интерфейс управления транзакциями как для локальных, так и для глобальных транзакций.
  • Это включает протоколы кеширования.
  • Безопасность : Простота внедрения модулей безопасности с функциями аутентификации и проверки.
  • Гибкие конфигурации : можно использовать аннотации на основе Java или конфигурацию XML.

Недостатки Spring

Многие из этих недостатков были устранены с помощью изобретения модуля Spring Boot, который очень самоуверен и предназначен для микросервисных архитектур.

Большинство современных Spring-приложений построены на Boot, но есть много старых приложений, которые все еще обслуживаются давними компаниями.

Особенности Spring

  • Инверсия управления (IoC) : перекладывает ответственность за зависимости с объектов на сам фреймворк. Без IoC каждый объект должен обрабатывать свой собственный экземпляр зависимости. В IoC объект просто указывает, что ему нужна определенная зависимость, и платформа настраивает и управляет ею автоматически. Это упрощает процесс разработки приложения за счет консолидации системы зависимостей и снижения нагрузки на отдельные классы.
  • Аспектно-ориентированное программирование : Spring AOP позволяет иметь разные загрузчики классов для повышения модульности и разделения сквозных проблем.
  • Внедрение зависимостей : процесс, который Spring использует для автоматического управления зависимостями bean-компонентов. Spring проверяет, какие bean-компоненты необходимы для работы конкретного bean-компонента, и внедряет их в качестве зависимости. Spring может выполнять внедрение зависимостей с помощью конструктора или метода установки.
  • Управление жизненным циклом контейнера : автоматическое создание, управление и настройка объектов приложения.
  • Поддержка MVC : поддерживает веб-архитектуру MVC, которая разделяет функциональные возможности между уровнями модели, представления и контроллера.
  • Обработка ошибок : включает обработку исключений JDBC с системой иерархии исключений.

Архитектура и компоненты Spring

Давайте разберем основные части приложения Spring Framework, чтобы помочь вам увидеть общую картину.

Beans

Spring Beans — это экземпляры классов, которыми управляет Spring. Они являются наиболее фундаментальным компонентом программы Spring.

Традиционно объекты создают личные экземпляры своих зависимостей. Spring управляет всеми зависимостями объекта и создает экземпляр объекта в bean-компоненте после внедрения необходимых зависимостей. @ComponentАннотаций является наиболее распространенным методом определения бобов.

У bean-компонентов есть установленный жизненный цикл и видимость в зависимости от их области действия. Существует шесть типов областей: синглтон, прототип, запрос, сеанс, приложение и веб-сокет. Одноэлементные и прототипные области могут использоваться в любом приложении, в то время как последние четыре области доступны только для веб-приложения.

Область видимости bean-компонента по умолчанию — singleton, в которой только один экземпляр bean-компонента создается и кэшируется в памяти. Несколько запросов к компоненту возвращают общую ссылку на один и тот же компонент. Напротив, область видимости прототипа приводит к созданию новых bean-компонентов всякий раз, когда запрос на bean-компонент выполняется в контексте приложения.

Autowiring

Метод Spring по внедрению бобов в одно и другое. Spring идентифицирует зависимость выбранного bean-компонента, ищет совпадение, а затем заполняет зависимость. @AutowiredАннотаций сообщает Spring, чтобы найти и внедрить сотрудничающий боб в другой. Если доступно более одного bean-компонента одного типа, Spring выдает ошибку.

В следующем сценарии Spring обнаруживает два bean-компонента типа Operator:

IoC Container

Контейнер IoC — это платформа, которая обеспечивает функциональность инверсии управления. Контейнер IoC управляет bean-компонентами и создает все необходимые экземпляры.

Например, у нас есть класс, Vehicleкоторый зависит от другого класса, Engine.

С IoC программисту нужно только упомянуть зависимость, а Spring сделает все остальное. Контейнер IoC будет создавать экземпляры обоих классов и внедрять Engineих Vehicleв качестве зависимости.

Модули Spring и проекты Spring

Модули — это наборы инструментов, сгруппированные по назначению. Разработчики могут указать, какие модули помимо базового набора они хотели бы импортировать в качестве зависимостей для любого конкретного приложения.

Модули организованы в группы, называемые проектами. Каждый проект содержит модули, которые предназначены для работы на определенной платформе или типе приложения. Системы проектов и модулей помогают сохранить вашу программу легкой, поскольку вы можете загружать только те инструменты, которые используются в приложении.

Модули базовой архитектуры Spring Project показаны ниже, сгруппированные по их слоям:

Модули базовой архитектуры Spring Project показаны ниже

Контейнер Spring Core включает 4 модуля, необходимых для использования Spring: Beans, Core, Context и Spring Expression Language (SpEL). Эти модули отвечают за основные функции среды Spring, такие как инверсия управления (IoC), внедрение зависимостей, интернационализация, а также за поддержку запросов к объекту во время выполнения.

Уровень доступа / интеграции Spring Data обеспечивает поддержку взаимодействия с базами данных и управления данными. Он состоит из 4 основных частей:

Веб-уровень содержит модули Веб, Сервлеты, Портлеты и Сокеты, используемые для создания веб-приложений.

Модуль Test обращается к сквозной проблеме модульного тестирования. Платформа Spring Test поддерживает тестирование с помощью JUnit, TestNG, а также создание фиктивных объектов для изолированного тестирования кода.

Модуль AOP предоставляет функции аспектно-ориентированного программирования, такие как перехват методов, pointcut, безопасность и функции ведения журнала. Spring имеет собственный модуль под названием Spring AOP, который предлагает базовые функциональные возможности аспектно-ориентированного программирования. Расширенная функциональность АОП может быть реализована за счет интеграции с AspectJ. АОП включает в себя комплексные проблемы бизнес-логики.

Помимо этого базового проекта, Spring включает проекты для всех основных вариантов использования. Эти проекты включают модули, которые слишком нишевые для базового проекта, но включают бесценные API-интерфейсы и функциональные возможности для целевого использования.

Например, Spring Cloud позволяет разрабатывать собственные облачные приложения, которые можно динамически настраивать и развертывать. Он предоставляет функциональные возможности для обработки общих шаблонов в распределенных системах. Другие проекты включают Spring Boot, Spring Security, Spring DAO, Spring Context и многие другие.

Начать работу с Spring

Теперь мы познакомим вас с вашим первым приложением Spring: простая система рекомендаций по фильмам. Настроить новый проект с помощью Spring Framework сложно, потому что вам нужно настроить полную архитектуру вручную, включая то, какие зависимости Apache Maven использовать, использовать ли XML или Java, и вы должны установить веб-сервер, такой как Tomcat.

Вместо этого мы будем использовать проект Spring Boot для автоматизации большей части процесса установки и использования его встроенного веб-сервера.

Как начать свой проект

Мы будем использовать Spring Initializr, чтобы быстро создать проект Spring Boot, используя его простое меню выбора. Сначала перейдите в start.spring.io. Вы найдете интерфейс меню, подобный приведенному ниже, с выбором настроек и полями метаданных.

Для этого проекта мы выберем «Maven Project»

После того, как вы все ввели, нажмите «Создать», чтобы создать zip-файл с архитектурой настройки. Разархивируйте папку в желаемое место на жестком диске. Эта папка будет содержать pom.xmlфайл для импорта в Eclipse IDE. Через короткое время вы увидите следующую иерархию:

  • src/main/java где будет написан код Java
  • src/main/resources где написаны свойства приложения
  • src/test/javaгде будут написаны тесты. Теперь вы можете щелкнуть правой кнопкой мыши MovieRecommenderSystemApplication.javaи запустить его как приложение Java, чтобы получить следующий вывод консоли.

Поздравляем, вы создали свое первое приложение Spring с помощью Spring Boot!

Добавление зависимостей

Теперь мы добавим простую реализацию рекомендателя фильмов с использованием системы зависимостей Spring. Программа примет название фильма в качестве входных данных и вернет три названия фильмов того же жанра. А пока мы жестко закодируем наш вывод, чтобы вы могли сосредоточиться на изучении структуры программы.

Сначала создайте новый класс в src/main/javanamed RecommenderImplementation.

Сначала создайте новый класс в srcmain

Затем мы добавим recommendMoviesметод в RecommenderImplementation. recommendMoviesМетод будет принимать строку заголовка фильма в качестве входных данных и возвращает три рекомендации в массиве String.

Используйте жестко запрограммированную реализацию ниже:

Теперь создайте экземпляр RecommenderImplementationкласса в MovieRecommenderSystemApplicationфайле, а затем вызовите recommendMoviesметод через RecommenderImplementationкласс.

А пока мы жестко запрограммируем getRecommendations возврат тех же трех фильмов.

Теперь мы можем использовать методы ContentBasedFilterкласса в RecommenderImplementationклассе. Замените предыдущую жестко запрограммированную реализацию recommendMoviesследующей реализацией на основе зависимостей.

Наконец, мы добавим toStringметод к mainметоду, чтобы сделать массив String доступным для чтения в качестве вывода.

Spring для ленивых. Основы, базовые концепции и примеры с кодом. Часть 1 - 1

Многие люди после прочтения моих статей про создание заготовки для веб-проекта и про создание простенького веб-сервиса на сервлетах — интересовались когда я напишу и про Spring. Я не хотел, предлагал почитать книгу (и до сих пор говорю, что книга — это лучше чем 10, а то и 100 статей в интернете). Но сейчас вот решил, что объясняя одно и то же разным людям, я трачу больше времени, чем если бы один раз сел и написал статью, а потом просто кидал бы ссылочку на неё. Так что пишу ради ссылочки)). В этой статье я не буду писать как за 5 минут сделать работающий проект на спринге по моему примеру. Я напишу лишь о базовых вещах, без знания которых "запилить" проект конечно можно, но вот что там происходит, и, что важнее, почему — будет не понятно.

Что такое Spring Framework?

Spring Framework, или просто Spring — один из самых популярных фреймворков для создания веб-приложений на Java. Фреймворк — это что-то похожее на библиотеку (возможно этот термин вам более знаком), но есть один момент. Грубо говоря, используя библиотеку, вы просто создаете объекты классов, которые в ней есть, вызываете нужные вам методы, и таким образом получаете нужный вам результат. То есть, тут более императивный подход: вы четко указываете в своей программе в какой конкретный момент надо создать какой объект, в какой момент вызвать конкретный метод, итд. С фреймворками дела обстоят слегка иначе. Вы просто пишете какие-то свои классы, прописываете там какую-то часть логики, а создает объекты ваших классов и вызывает методы за вас уже сам фреймворк. Чаще всего, ваши классы имплементируют какие-то интерфейсы из фреймворка или наследуют какие-то классы из него, таким образом получая часть уже написанной за вас функциональности. Но не обязательно именно так. В спринге например стараются по максимуму отойти от такой жесткой связности (когда ваши классы напрямую зависят от каких-то классов/интерфейсов из этого фреймворка), и используют для этой цели аннотации. Дальше мы еще к этому моменту вернемся. Но важно понять, что спринг — это просто набор каких-то классов и интерфейсов, которые уже написаны за вас :) Еще хочу сразу отметить, что спринг можно использовать не только для веб-приложений, но и для так знакомых всем нам самых обычных консольных программок. И сегодня мы что-то такое даже напишем.

Структура

Но спринг — это не один какой-то конкретный фреймворк. Это скорее общее названия для целого ряда небольших фреймворков, каждый из которых выполняет какую-то свою работу.

Spring для ленивых. Основы, базовые концепции и примеры с кодом. Часть 1 - 2

  • data access;
  • web;
  • core;
  • и других.

Почему Spring в Java?

Ну кроме того, что это модно-стильно-молодежно, могу сразу сказать, что как только вы им хоть немного овладеете — вы поймете сколько всякой разной работы вам теперь не приходится делать, и сколько всего берет на себя Spring. Можно написать пару десятков строк конфигов, написать парочку классов — и получится работающий проект. Но как только начинаешь задумываться сколько там всего находится "под капотом", сколько работы выполняется, и сколько пришлось бы писать кода, если делать такой же проект на голых сервлетах или на сокетах и чистой Java — волосы встают дыбом :) Есть даже такое выражение, как "магия" Spring. Это когда ты видишь, что все работает, но ты примерно прикидываешь сколько там всего должно происходить чтобы все работало и как оно там все работает — то кажется, что происходит это все благодаря действительно какой-то магии)) Проще назвать это все магией, чем попытаться объяснить как оно там все взаимосвязано. :) Ну и второй аргумент "за" изучение Spring — это то, что в примерно 90% вакансий на джуна (по моим личным наблюдениям) — требуется либо знание, либо хотя бы общее представление о джентельменском наборе спринга из data , web-mvc и security :) Но сегодня только об основах.

DI/IoC

Если вы пытались что-то читать по спрингу, то первое с чем вы сталкивались — это наверное вот эти вот буковки: DI/IoC. Сейчас я вам очень рекомендую отвлечься от этой статьи и почитать вот эту статью на хабре! IoC (Inversion of Control) — инверсия управления. Об этом я уже вскользь упоминал, когда писал, что при использовании библиотеки вы сами прописываете в своем коде какой метод какого объекта вызвать, а в случает с фреймворками — чаще всего уже фреймворк будет вызывать в нужный ему момент тот код, который вы написали. То есть, тут уже не вы управляете процессом выполнения кода/программы, а фреймворк это делает за вас. Вы передали ему управление (инверсия управления). Под DI понимают то Dependency Inversion (инверсию зависимостей, то есть попытки не делать жестких связей между вашими модулями/классами, где один класс напрямую завязан на другой), то Dependency Injection (внедрение зависимостей, это когда объекты котиков создаете не вы в main-е и потом передаете их в свои методы, а за вас их создает спринг, а вы ему просто говорите что-то типа "хочу сюда получить котика" и он вам его передает в ваш метод). Мы чаще будем сталкиваться в дальнейших статьях со вторым.

Бины и контекст

Одно из ключевых понятий в спринге — это бин. По сути, это просто объект какого-то класса. Допустим, для нашей программы надо использовать 3 объекта: котика, собачку и попугайчика. И у нас есть куча классов с кучей методов, где иногда нам нужен для метода котик, а для другого метода — собачка, а иногда у нас будут методы, где нужен котик и попугайчик (например метод для кормежки котика, хе-хе), а в каких-то методах — все три объекта понадобятся. Да, мы можем в main-е сначала создать эти три объекта, а потом их передавать в наши классы, а уже изнутри классов — в нужные нам методы. И так по всей программе. А если еще и представить, что периодически мы захотим менять список принимаемых параметров для наших методов (ну решили переписать что-то или добавить функциональности) — то нам придется делать довольно много правок по коду если надо будет что-то поменять. А теперь если представить, что таких объектов у нас не 3, а 300? Как вариант, это собрать все наши такие объекты в какой-то один общий список объектов (List<Object>) и во все методы передавать его, а изнутри методов уже доставать тот или иной объект, который нам нужен. Но что если представить, что по ходу программы у нас в этот список может добавиться какой-то объект, или (что хуже) удалиться? Тогда во всех методах, где мы достаем объекты из списка по их индексу — все может поломаться. Тогда мы решаем хранить не список, а мапу, где ключом будет имя нужного нам объекта, а значением — сам объект, и тогда мы сможем из него доставать нужные нам объекты просто по их имени: get("попугайчик") и в ответ получили объект попугайчика. Или например ключ — это класс объекта, а значение — сам объект, тогда мы сможем указать уже не имя объекта, а просто класс нужного нам объекта, тоже удобно. Или даже написать какую-то обертку над мапой, где сделать методы, чтобы в каких-то случаях доставать объекты по их имени, а в других случаях — по классу. Вот это и получится у нас application context из спринга. Контекст — это набор бинов (объектов). Обращаясь к контексту — мы можем получить нужный нам бин (объект) по его имени например, или по его типу, или еще как-то. Кроме того, мы можем попросить спринг самого сходить поискать в своем контексте нужный нам бин и передать его в наш метод. Например, если у нас был такой метод: нам спринг когда вызывал этот метод — передавал в него объект нашего котика из своего контекста. Теперь мы решаем, что нашему методу кроме котика нужен еще и попугайчик. Используя спринг — для нас нет ничего проще! Мы просто пишем: и спринг, когда будет вызывать этот наш метод — сам поймет, что сюда надо передать котика и попугайчика, сходит к себе в контекст, достанет эти два объекта и передаст их в наш метод. Передав спрингу бразды правления нашей программой — мы так же переложили на него ответственность за создание объектов и передачу их в наши методы, которые он будет вызывать. Возникает вопрос: а как спринг будет знать какие объекты (бины) создавать?


Следуйте за нами на нашей фан-странице, чтобы получать уведомления каждый раз, когда появляются новые статьи. Facebook


1- Введение

Spring Framework 4.x

Eclipse 4.6 NEON (ok for Eclipse 4.5 MARS)

В этой статье я использую Maven чтобы объявить библиотеки Spring которые буду использовать,вместо того чтобы скачать Spring и объявлять библиотку обычным способом.

Maven это инструмент который помогает вам управлять библиотеками автоматически и эффективно, он стал распространенным, что каждый программист Java должен знать. Если вы не знаете про Maven вы можете уделить 10 минут и изучить про способ использования здесь:

В случае если вы хотите скачать Spring и объявить библиотеку традиционно, вы можете посмотреть аннотацию в конце статьи.

2- Spring Framework

Изображение ниже иллюстрирует структуру Spring Framework.


  1. IoC Container: Это самая важная и самая основная часть, платформа Spring. Он играет роль конфигурации и управления жизненного цикла (Lifecycle) объектов java. В сегодняшней статье мы изучим эту часть.
  2. DAO, ORM, AOP, WEB: Эти модули являются готовыми tool или framework интегрированные в Spring.

2.1- Inversion of Control & Dependency Injection

Чтобы понять эту ситуация рассмотрим некоторые классы ниже:

Можно увидеть что класс HelloWorldService управляет создание объекта HelloWorld.

- В случае выше когда объект HelloWorldService создан от его конструктора (constructor), объект HelloWorld так же создается, и он создается от StrutsHelloWorld.

Вопрос состоится в том, что вы хотите создать объект HelloWorldService одновременно создается объект HelloWorld, но он должен быть SpringHelloWorld.
Поэтому здесь HelloWorldService управляет "object creation" в HelloWorld. Почему мы не передаем создание HelloWorld третьей стороне для обработки вместо того, чтобы создавать его в HelloWorldService. У нас есть понятие "inversion of control" то есть"инверсия контроля" (IoC). И IoC Container будет играть роль управяляющего создающего и HelloWorldService и HelloWorld.


IoC Container создает объект HelloWorldService и объект HelloWorld потом передает HelloWorld в HelloWorldService через setter. Работа, которую выполняет IoC Container это "внедрение зависимости" (Dependency Injection) в HelloWorldService . Зависимость здесь означает зависимость между объектами: HelloWorldService и HelloWorld.

Здесь мы можем ясно определить что такое IoC&DI. Давайте вместо выполним пример HelloWorld чтобы лучше понять.

Читайте также: