Всем, привет! Продолжаю серию своих уроков, посвященных программированию на языке Java и в частности Spring Framework. В предыдущих статьях мы научились добавлять jar-файлы (библиотеки) в пустой Java-проект, создавать простое Spring приложение сконфигурированное на XML как с ручным добавлением библиотек, так и с помощью сборщика Maven.
И сегодня мы создадим с Вами Spring приложение со сборщиком Maven и без XML. Такой тип конфигурирования приложения еще называют java-based или конфигурирование с помощью аннотаций.
Хочу отметить, что текущий стандарт де-факто в современном «взрослом» java-производстве (в современной enterprise-разработке) это SpringBoot + Maven. И все сконфигурировано аннотациями. Так что мы изучаем с Вами в этой статье почти что «взрослый» вариант. Поехали!
На этот раз уже не будем тратить время на создание Maven-проекта из консоли и создадим его прямо из IDE. Как и всегда, я использую JetBrains IntelijIdea.
Итак, открываем нашу IDE. Если у Вас открылся прежний проект, то выбираем File / New / Project. Если вы открываете среду разработки в первый раз, то видим следующее окно:

Жмем «Create New Project». В следующем окне, в списке справа выбираем Maven. В нижний список через какое-то время подгрузятся все возможные варианты арчетайпов (о них мы говорили в предыдущей статье). Не выбирайте ничего и жмите Next.

В следующем окне задаем местоположение и имя проекта. В раскрывающимся списке внизу — вводим группу нашего будущего проекта и название артефакта. Группа появится в Pom-файле в теге <groupId>, а артефакт — именно под его именем будет генерироваться будущий jar-ник и под его именем проект попадет в локальный репозиторий Maven (что позволит его потом переиспользовать):

Жмем Finish.
Если внизу у Вас всплыло вот такое вот окошко, обязательно нажмите Enable Auto-Import:

Это позволит Maven’у автоматически импортировать зависимости при добавлении новых.
Находим в дереве проекта файл pom.xml, это как раз и есть конфигурационный файл сборщика и вставляем туда следующее:
На что стоит обратить внимание? Смотрите, мы вынесли версию Spring’а как отдельное свойство наверх в тег «properties«:
<properties>
<org.springframework.version>5.2.3.RELEASE</org.springframework.version>
</properties>
Это дает нам возможность просто потом использовать ее как ссылку вида ${org.springframework.version}. И при необходимости поменять версию — мы поменяем ее 1 раз, а не несколько, как если бы вставляли бы ее в каждый тег dependency.
Зависимости, которые я указал в этом файле — это собственно те самые библиотеки, необходимые для работы фреймворка Spring в Вашем проекте, именно их мы ранее подгружали в ручную.
Теперь нам осталось добавить основной код нашего проекта и наслаждаться! Поехали!
Переходим на дерево проекта справа (вкладка так и называется — Project), разворачиваем ее до уровня java (иконка папки выделена синим), вызываем на ней контекстное меню, там выбираем пункт New / Package и вводим название пакета. У меня это:

Как видно, пакет с одной стороны совпадает с Мвановским groupId, с другой стороны отражает суть проекта.
И так, для начала создадим привычный уже нам Бин:
В комментариях я специально пометил что значит та или иная строчка. Кстати, я бы еще добавил, там где в комментарии написано «поле», что это «приватное поле». То есть оно видно только в рамках класса. Обратится к нему извне можно только через геттер или сеттер. Ну или через конструктор, как в моем примере.
А теперь мы сделаем с Вами святая святых современного Spring-проекта — класс конфигурации или просто конфиг. Собственно это и есть аналог-заменитель xml-конфигурации. И сообщаем мы Спрингу о том, что это конфигурация специальной аннотацией @Configuration.
Вот его код:
У нас есть 2 метода, первый из них закомментирован.
Собственно в первом методе мы создаем бин, инициализируя при создании переменную message через конструктор. А во втором методе через сеттер. Вот и вся разница. Вы можете раскомментировать первый, соответственно закоментировав второй и попробовать оба. Какой способ лучше — решать Вам, но в первом очевидно меньше кода.
Ну и нам осталось написать наш главный класс с методом Main:
Разница с предыдущими моими статьями (то есть, с конфигурацией через xml, что теперь мы используем класс AnnotationConfigApplicationContext для конфигурирования Спрингового контейнера. У него в аргумент передается класс конфигуратора, а не путь до файла beans.xml. Вот и все.
Запускаем приложение и вуаля…. (я надеюсь, как запускать приложение Вы уже знаете??? )
А вот и наглядная видео-версия статьи:
Спасибо! Мне пригодилось! Разжевано все по полочкам!