Что такое spring java
Обеспечивает базовую поддержку управления зависимостями, управление транзакциями веб-приложений, доступ к данным, обмен сообщениями и многое другое.
Введение
Spring Framework обеспечивает комплексную модель разработки и конфигурации для современных бизнес-приложений на Java — на любых платформах. Ключевой элемент Spring — поддержка инфраструктуры на уровне приложения: основное внимание уделяется «водопроводу» бизнес-приложений, поэтому разработчики могут сосредоточиться на бизнес-логике без лишних настроек в зависимости от среды исполнения.
Возможности
- Внедрение зависимости
- Аспектно-ориентированное программирование, включая декларативное управление транзакциями
- Создание Spring MVC web-приложений и RESTful web-сервисов
- Начальная поддержка JDBC, JPA, JMS
- Многое другое.
Быстрый старт
Рекомендованный путь для начального использования spring-framework в вашем проекте с использованием системы управления зависимостями – скопировать фрагмент кода ниже и вставить в вашу конфигурацию сборки. Нужна помощь? Ознакомьтесь с нашими руководствами по созданию приложений с использованием Maven и Gradle.
org.springframework spring-context 4.1.6.RELEASE
org.springframework spring-context 4.0.8.RELEASE
dependencies
dependencies
Spring Framework состоит из различных модулей, здесь мы показываем функциональность spring-context . См. «Руководства к действию» для использования в других случаях.
После того, как вы добавили в вашу сборке spring-context зависимость, вы можете сделать следующее:
package hello; public interface MessageService
hello/MessagePrinter.java
package hello; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class MessagePrinter < @Autowired private MessageService service; public void printMessage() < System.out.println(this.service.getMessage()); >>
hello/Application.java
package hello; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.*; @Configuration @ComponentScan public class Application < @Bean MessageService mockMessageService() < return new MessageService() < public String getMessage() < return "Hello World!"; >>; > public static void main(String[] args) < ApplicationContext context = new AnnotationConfigApplicationContext(Application.class); MessagePrinter printer = context.getBean(MessagePrinter.class); printer.printMessage(); >>
Приведенный выше пример показывает основную концепцию внедрения зависимостей: MessagePrinter отделен от реализации MessageService , но Spring Framework связал из всех вместе.
Учебное пособие по Spring: что такое Spring Framework и как его установить?
Spring Framework — это платформа с открытым исходным кодом для создания веб-приложений с использованием Java в качестве языка программирования. Он мощный и легкий, но простой в использовании и обеспечивает простую поддержку разработки приложений Java. Spring — это легковесный фреймворк, который можно рассматривать как фреймворк фреймворков, поскольку он также предлагает поддержку различных фреймворков, таких как Hibernate, Struts, Tapestry и JSF.
Особенности Spring Framework
Теперь в этом уроке Spring мы рассмотрим некоторые наиболее важные функции Spring Framework:
- Предопределенные шаблоны
- Легко проверить
- Слабая связь
- Небольшой вес
- Быстрое развитие
- Мощная абстракция
- Предлагает множество ресурсов
- Декларативная поддержка
- Предлагает комплексные инструменты
Краткая история весны
Теперь в этом руководстве по Spring Framework мы рассмотрим некоторые важные вехи из истории Spring:
- Spring Framework был написан Родом Джонсоном и впервые выпущен в июне 2002 года.
- Весна ла s выпуск версии t в марте 2004 г.
- Выпуск версии Spring 1.2.6 в 2006 г.
- Выпуск версии Spring 2.0 в октябре 2006 г.
- Выпуск версии Spring 2.5 в ноябре 2007 г.
- Выпуск версии Spring 3 в декабре 2009 г.
- Выпуск версии Spring 3.1 в декабре 2011 г.
- Выпуск версии Spring framework 4 в декабре 2013 г. с поддержкой Java 8.
- Версия Spring framework 4.2.0 выпущена в июле 2015 г.
- Версия Spring framework 4.2.1, выпущенная в сентябре 2015 г.
- Версия Spring Framework 4.3 выпущена 10 июня 2016 г.
- Версия Spring framework 5.0 выпущена в июне 2017 г.
Spring Framework Архитектура
Архитектура Spring Framework предоставляет 20 модулей, которые можно использовать в зависимости от требований приложения.

Spring Framework Архитектура
Так, Основные и боб обеспечить фундаментальную часть структуры, включая IoC и DI.
Основной контейнер
Базовый контейнер дополнительно разделен на подкомпоненты, такие как модули Core, Beans, Context и Expression Language.
Рассмотрим каждую из этих моделей подробно:
Ядро пружины:
Модуль Core предоставляет все основные компоненты Spring Framework. Он включает в себя функции IoC (инверсия управления) и внедрения зависимостей.
Весенняя фасоль:
Этот модуль предлагает BeanFactory, который представляет собой сложную реализацию шаблона фабрики.
Весенний контекст:
Модуль Context построен на прочной основе, предоставляемой модулями Core и Beans, и представляет собой среду, которая помогает вам получить доступ к любым определенным и настроенным объектам.
Языки выражений Spring (SpEL):
Этот модуль предлагает язык выражений для изменения и запроса графа объектов во время выполнения.
Доступ к данным/интеграция:
Уровень доступа к данным и интеграции состоит из модулей JDBC, ORM, JDBC, OXM, JMS и транзакций.
- ORM: модуль ORM обеспечивает согласованность/переносимость кода независимо от технологий доступа к данным. Он будет основан на концепции объектно-ориентированного отображения.
- Модуль JDBC состоит из уровня абстракции JDBC. Это поможет вам понять необходимость выполнения кодирования, связанного с JDBC.
- OXM: Object XML Mappers (OCM) помогает конвертировать объекты в формат XML и наоборот.
- Модуль службы сообщений Java предлагает такие функции, как создание и использование сообщений.
- Транзакция: этот модуль предлагает декларативный и программный метод управления для реализации уникальных интерфейсов и для всех типов POJO (обычный старый Java-объект).
Весенняя паутина:
Разработка: этот модуль использует прослушиватели сервлетов и контекст веб-ориентированного приложения. Он также предлагает функцию веб-ориентированной интеграции и функцию загрузки файлов из нескольких частей.
Веб-сервлет: Этот модуль хранит реализацию на основе MVC для веб-приложений.
Веб-сокет: Модуль предлагает двустороннюю связь между клиентом и сервером в веб-приложениях на основе WebSocket.
Веб-портлет: Этот модуль также называется модулем Spring-MVC-Portlet. Он предлагает портлеты на основе Spring и копирует все функции модуля веб-сервлетов.
АОП: Язык АОП — это полезный инструмент, который позволяет разработчикам добавлять в приложение корпоративную функциональность.
Инструментарий: этот модуль предлагает инструментарий классов и реализации загрузчика. Он используется для конкретных серверов приложений.
Контрольная работа: Этот модуль обеспечивает поддержку тестирования компонентов Spring с помощью инструментов TestNG или JUnit. Он предлагает последовательную загрузку Spring ApplicationContexts и кэширование этих контекстов.
Весна — MVC Framework
Теперь в этом руководстве по Spring Framework мы узнаем о платформе Spring MVC:

Фреймворк Spring MVC
Фреймворк Spring web MVC предлагает архитектуру модель-представление-контроллер и предлагает компоненты, которые помогают вам создавать гибкие и слабосвязанные веб-приложения.
Шаблон MVC позволяет разделить различные аспекты приложения, обеспечивая при этом слабую связь между этими элементами. Spring MVC также помогает создавать гибкие и слабосвязанные веб-приложения.
Дизайн MVC также позволяет разделить бизнес-логику, логику представления и логику навигации. Он также предлагает элегантное решение для использования MVC в Spring Framework с помощью DispatcherServlet.
Как MVC работает весной?
Теперь в уроке Spring мы собираемся изучить как работает MVC весной:

Как MVC работает весной
- DispatcherServlet получает запрос.
- После этого DispatcherServlet связывается с HandlerMapping. Он также отзывает контроллер, связанный с этим конкретным запросом.
- Контроллер обрабатывает этот запрос, вызывая методы службы и объект ModelAndView, возвращаемый DispatcherServlet.
- Имя представления отправляется в ViewResolver для поиска фактического представления для вызова.
- После этого DispatcherServlet передается в View для визуализации результата.
- Используя данные модели, представление визуализирует и отправляет результат обратно пользователю.
Аспектно-ориентированное программирование
Аспектно-ориентированное программирование позволяет глобальным свойствам программы определять, как она компилируется в исполняемую программу.
Ключевой единицей модульности является аспект, а не класс. Аспектно-ориентированное программирование разбивает логику программы на различные части, известные как проблемы.
Сквозная проблема может повлиять на все приложение и централизована в одном месте кода, например безопасность транзакций, управление, ведение журнала, аутентификация и т. д.

Его также можно рассматривать как шаблон проектирования динамического декоратора. Этот шаблон также предлагает дополнительное поведение, которое можно добавить к существующему классу путем переноса исходного класса, дублирования его интерфейса и удаления оригинала.
Основные концепции АОП
Существует семь основных концепций аспектно-ориентированного программирования.

Основные концепции АОП
Давайте обсудим их подробно:
- Аспект: Аспект — это класс, который позволяет реализовать приложение JEE. Это касается тех, которые охватывают несколько классов, таких как управление транзакциями, безопасность и т. д. Аспекты могут быть типичным классом, настроенным с использованием конфигурации Spring XML, или обычным классом, аннотированным с использованием аннотации @Aspect.
- Точка присоединения: Это потенциальная точка выполнения программы, куда можно подключить аспект. Это может быть метод, вызываемый при возникновении исключения, или даже изменяемое поле.
- Совет: Советы — это фактические действия, предпринятые для конкретной точки соединения. Этот метод будет выполнен, когда определенная точка соединения встретится с соответствующей точкой в приложении.
- Вырез: Это выражение, которое можно сопоставить с точками соединения, чтобы проверить, следует ли выполнить этот совет или нет.
- Целевой объект: На основе целевого объекта применяются устройства. В АОП во время выполнения создается подкласс, в котором целевой метод должен быть переопределен, а рекомендации включаются в зависимости от их конфигурации.
- Прокси-сервер: Этот объект должен быть создан после применения совета к целевому объекту.
- Плетение: Это метод связывания аспекта с другими объектами или типами приложения для создания рекомендуемого объекта.
Установка Java Spring
Теперь в этом руководстве по Java Spring мы изучим пошаговую информацию по установке Java Spring на ваш компьютер:
Шаг 1) Откройте ваш браузер.
Перейдите на затмение.org.
Шаг 2) Загрузите установщик Eclipse.
Загрузите установщик Eclipse Neon и установите его в своей системе Windows.

Шаг 3) Найдите 64-битную версию.
Нажмите кнопку «Загрузить 64-битную версию».

Шаг 4) Найдите IDE для разработчиков Java.
Перейдите в Eclipse IDE для разработчиков Java и нажмите ссылку «64-разрядная версия».

Шаг 5) Найдите 64-битную ссылку.
Нажмите на ссылку «Windows 64-bit».

Шаг 6) Загрузите zip-файл.
Нажмите кнопку «Загрузить», чтобы загрузить zip-файл.

Шаг 7) Извлеките zip-файл.
Извлеките zip-архив загрузки в определенную папку.

Шаг 8) Выберите каталог рабочей области.
Нажмите кнопку «Обзор», чтобы выбрать каталог рабочей области.

Шаг 9) Выберите папку.
Нажмите «Выбрать папку», чтобы выбрать папку.

Процесс будет отображаться, как показано на следующем экране.

Шаг 10) Открытый клиент.
Открытие клиента Eclipse Marketplace.
- Перейдите в меню «Справка».
- Нажмите на опцию «Eclipse Marketpalce».

Шаг 11) Поиск весеннего плагина.
Поиск и установка плагина Spring.
- Напишите Spring в текстовом поле «Найти».
- Нажмите на значок «Поиск».
- Нажмите кнопку «Установить», чтобы установить плагин.

Шаг 12) Нажмите кнопку «Подтвердить».
Подтвердите выбранные функции и нажмите кнопку «Подтвердить».

Шаг 13) Примите условия.
Принятие условий и установка программного обеспечения.
- Нажмите кнопку-переключатель «Я принимаю условия лицензионного соглашения».
- Нажмите кнопку «Готово», чтобы завершить установку.

Отобразится экран приветствия с ходом установки программного обеспечения.

Шаг 14) Перезапустите ИДЕ.
Нажмите кнопку «Перезагрузить сейчас», чтобы перезагрузить компьютер. Eclipse IDE и примените изменения.

Появится следующий экран:

Преимущества Spring Framework
Вот важные плюсы/преимущества использования Spring.
- Spring позволяет разработчикам разрабатывать приложения корпоративного класса с помощью POJO.
- Предлагает шаблоны для Hibernate, JDBC, Hibernate, JPA и т. д., позволяющие избежать написания длинного кода.
- Предоставляет абстракцию для Java Enterprise Edition (JEE).
- Организовать весну можно модульно. Так что, если количество пакетов и классов существенно, вам нужно только то, что вам нужно, а остальное игнорировать.
- Он предлагает декларативную поддержку транзакций, форматирования, проверки, кэширования и т. д.
- Приложение, разработанное с использованием Spring, простое, поскольку зависящий от среды код перемещается в эту среду.
Недостатки Spring Framework
Вот недостатки/минусы Spring Framework.
- Java Spring предлагает слишком много ограничений.
- Код является общедоступным, если он виден всем.
- Он также не предлагает специальные функции.
Итоги
- Spring framework — это простая в использовании платформа с открытым исходным кодом. Платформа Java
- Предопределенные шаблоны и свободные пары — важные особенности Java Spring.
- Фреймворк Spring был написан Родом Джонсоном и впервые выпущен в июне 2002 года.
- Spring Framework предоставляет 20 модулей, которые можно использовать в зависимости от требований приложения.
- Java-спринг-диспетчерсервлет взаимодействует с HandlerMapping. Он также отзывает контроллер, связанный с этим конкретным запросом.
- Аспектно-ориентированное программирование позволяет глобальным свойствам программы определять, как она компилируется в исполняемую программу.
- Самым большим преимуществом Java Spring является то, что он позволяет разработчикам разрабатывать приложения корпоративного класса с помощью POJO.
- Самый большой недостаток Java Spring заключается в том, что он предлагает слишком много ограничений.
- Программа для печати простых чисел от 1 до 100 на Java
- Сортировка выбором в программе Java с примером
- Абстрактный класс и интерфейс в Java – разница между ними
- 100+ вопросов и ответов на собеседовании по Java (2023 г.)
- Учебное пособие по JAVA в формате PDF: основы для начинающих (загрузить сейчас)
Spring для ленивых. Основы, базовые концепции и примеры с кодом. Часть 1


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

- 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 ) и во все методы передавать его, а изнутри методов уже доставать тот или иной объект, который нам нужен. Но что если представить, что по ходу программы у нас в этот список может добавиться какой-то объект, или (что хуже) удалиться? Тогда во всех методах, где мы достаем объекты из списка по их индексу — все может поломаться. Тогда мы решаем хранить не список, а мапу, где ключом будет имя нужного нам объекта, а значением — сам объект, и тогда мы сможем из него доставать нужные нам объекты просто по их имени: get(«попугайчик») и в ответ получили объект попугайчика. Или например ключ — это класс объекта, а значение — сам объект, тогда мы сможем указать уже не имя объекта, а просто класс нужного нам объекта, тоже удобно. Или даже написать какую-то обертку над мапой, где сделать методы, чтобы в каких-то случаях доставать объекты по их имени, а в других случаях — по классу. Вот это и получится у нас application context из спринга. Контекст — это набор бинов (объектов). Обращаясь к контексту — мы можем получить нужный нам бин (объект) по его имени например, или по его типу, или еще как-то. Кроме того, мы можем попросить спринг самого сходить поискать в своем контексте нужный нам бин и передать его в наш метод. Например, если у нас был такой метод:
public void doSomething(Cat cat)
нам спринг когда вызывал этот метод — передавал в него объект нашего котика из своего контекста. Теперь мы решаем, что нашему методу кроме котика нужен еще и попугайчик. Используя спринг — для нас нет ничего проще! Мы просто пишем:
public void doSomething(Cat cat, Parrot parrot)
и спринг, когда будет вызывать этот наш метод — сам поймет, что сюда надо передать котика и попугайчика, сходит к себе в контекст, достанет эти два объекта и передаст их в наш метод. Передав спрингу бразды правления нашей программой — мы так же переложили на него ответственность за создание объектов и передачу их в наши методы, которые он будет вызывать. Возникает вопрос: а как спринг будет знать какие объекты (бины) создавать?
Способы конфигурации приложения
- при помощи xml файлов/конфигов;
- при помощи java-конфигов;
- автоматическая конфигурация.
- наиболее приоритетный способ, которому стоит отдавать предпочтение — это автоматическая конфигурация;
- если при помощи автоматической конфигурации нет возможности правильно настроить все возможные бины — использовать джава-конфигурацию (создание объектов используя джава код);
- ну и самый низкоприоритетный способ — это по-старинке, используя xml конфиги.
Что такое Spring Framework и для чего он нужен?
Spring-фреймворк обеспечивает комплексную программную и конфигурационную модель для современных Java-enterprise приложений. Ключевой элемент Spring это инфраструктурная поддержка приложений таким образом, чтобы команда разработчиков могла сфокусироваться на бизнес логике приложения которое они пишут, а не на технических деталях платформы на которую они устанавливают приложение.
Возможности
- Dependency Injection
- Аспектно-ориентированное программирование включая декларативное управление транзакциями
- Spring MVC и RESTful модули для создания веб-приложений
- Поддержка JDBC, JPA, JMS
- И много другого…
Все доступные фичи и модули описаны по ссылке overview-modules
Минимальные требования
- JDK 6+ для Spring Framework 4.x
- JDK 5+ для Spring Framework 3.x
Простейший пример dependency injection
Создадим maven проект с зависимостью от Spring
При этом подключим spring-context. Это один из основных модулей, который предоставляет нам механизмы dependency injection.
org.springframework spring-context 4.3.3.RELEASE
Создадим сущность MessagePrinter
Это класс который имеет зависимость от сервиса MessageService
package hello; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class MessagePrinter final private MessageService service; @Autowired public MessagePrinter(MessageService service) this.service = service; > public void printMessage() System.out.println(this.service.getMessage()); > >
Создадим и сам сервис MessageService
package hello; public interface MessageService String getMessage(); >
Далее нам понадобиться магия Spring, чтобы связать их вместе
package hello; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.*; @Configuration @ComponentScan public class Application @Bean MessageService mockMessageService() return new MessageService() public String getMessage() return "Hello World! This is our dummy Message Service speaking."; > >; > public static void main(String[] args) ApplicationContext context = new AnnotationConfigApplicationContext(Application.class); MessagePrinter printer = context.getBean(MessagePrinter.class); printer.printMessage(); > >
Пример показывает концепцию Dependency Injection в действии, MessagePrinter отвязан(decoupled) от реализации MessageService при этом Spring Framework связывает эти классы вместе в конфигурации которая задается в Application классе.
Вы можете скачать рабочий пример кода по следующей ссылке spring-di-example
Updated: November 06, 2016
