Spring Framework. Создаем первое HelloWorld приложение без Maven на XML

Этой статьей я продолжаю свои уроки по Java. Я немного прыгнул через голову и пропустил серию материалов по Java Core, оставив за бортом базовые ключевые слова, операторы и прочее. Думаю, что если подобный материал окажется востребованным, я обязательно освещу в своих статьях и эти темы. Ну а сегодня мы создадим простое HelloWorld java-приложение с использованием Spring Framework на xml-конфигурации без сборщиков (типа Maven).

Первое, что Вам нужно, это склонировать себе этот проект — https://github.com/Latinist/libs4Spring.git. Так как я намеренно привожу этот пример именно без использования каких-либо сборщиков типа Maven (с Maven мы попробуем этот же пример в другой раз), то все необходимые для работы с фреймворком Spring библиотеки мне пришлось выложить отдельно.

Если Вы еще не знаете, как работать с Git, то сделаем так. Заходим в браузере по ссылке https://github.com/Latinist/libs4Spring.git, видим следующее:

… щелкаем на зеленую кнопку «Clone or download«, в выпадающем меню выбираем Download ZIP, качаем себе архив, распаковываем, запоминаем путь к папке. В архиве коллекция *.jar-файлов. Это бибилиотеки, необходимые для использования в проекте фреймворка Spring.

Как подключить библиотеки к проекту, начиная с этапа создания проекта я рассказал вот в этой статье. Так что не будем останавливаться на этом.

Итак, создаем проект (я использую IDE от JetBrains Intelij IDEA, что и Вам рекомендую), добавляем скаченные библиотеки и видим следующую картинку:

Я специально раскрыл ветку с библиотеками в панели справа. Кстати, сейчас IDE сама назвала ее по имени первой библиотеки в списке — common-logging. Вы можете зайти и переименовать группу бибилиотек. Например, Spring.

Добавим наш первый Бин.

Что такое Бин? Бин (от английского — «кофейное зерно») — это по сути обычный java-объект. Его отличие от всех остальных объектов в том, что он управляется DI-контейнером. Про Dependency Injection и DI-контейнер, по сути, главный механизм Spring’а, мы поговорим позже, в отдельном видео и статье. А пока просто возьмите себе на заметку, если вы ничего не знаете об этом, что это такая фича, которая выросла из потребности программистов при рефакторинге большинх интерпрайз-проектов иметь слабосвязнный код.

Щелкаем правой кнопкой мыши на названии пакета com.antonromanov.firstspring.application и видим контекстное меню:

Выбираем New. В следущем окне вводим название нашего бина HelloWorld и двоыс щелчком по элементу Class подтверждаем выбор. У нас появляется вкладка HelloWorld с пустой «рыбой» нового класса. Пишем там следующий код:

public class HelloWorld {
	private String message;

	public void setMessage(String message){
		this.message  = message;
	}
	public void getMessage(){
		System.out.println("Your Message : " + message);
	}
}

Теперь нам нужно вызвать добавить немного строк в класс Main, чтобы обратиться к этому Бины. Щелкаем на него и вставляем следующий код (добавляем метод):

public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
        HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
        obj.getMessage();
    }

Если Intelij IDEA подчеркивает некоторые фрагменты кода красным вот так:

… Установите указатель мыши на них и нажмите Alt + Enter. Если появится контекстное меню, выберете «Import Class«. В верхней части класс должны появится две строчки импорта:

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

Осталось добавить конфигурационный файл настройки бинов. Переходим в каталог src, добавляем новый файл:

Называем его Beans.xml и вставляем туда следующий код:

<?xml version = "1.0" encoding = "UTF-8"?>

<beans xmlns = "http://www.springframework.org/schema/beans"
       xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation = "http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <bean id = "helloWorld" class = "com.antonromanov.firstspring.application.HelloWorld">
        <property name = "message" value = "Hello World!"/>
    </bean>

</beans>

Осталось запустить программу и получить в консоли:

Теперь, в кратце что мы сделали простыми словами:

  1. Main — это класс нашего консольного приложения, содержащий метод public static void main(String[] args). Именно этот метод Java-машина воспринимает как «точка входа в программу». Именно через него JVM реализует «выполнение» вышего приложения.
  2. В этом методе мы используем ClassPathXmlApplicationContext (и это не единственный способ) как способ сообщить DI-контейнеру Спринга как будет происходить конфигурирование бинов. В данном случае мы указываем ему, что конфигурирование будет происходить с помощью файла Beans.xml, лежащего в application path. ApplicationContext — это интерфейс, определяющий контекст нашего приложения. В свою очеред контекст приложения — это его главный интерфейс, определяющий всю онфигурацию Spring-приложения.
  3. Вот этой строчкой «HelloWorld obj = (HelloWorld) context.getBean(«helloWorld»);» мы «достаем» из контекста наш Бин HelloWorld. Но достаем именно средствами Dependency Injection, а не прямым наследованием или созданием инстанса. Зачем это нужно, мы поговорим в других статьях.
  4. Весь Beans.xml по сути xml-конфигурационный файл для конфигурирования, простите за тавталогию, DI-контейнера приложения. Мы описываем здесь наши бины, можем заранее инициализировать какие-то параметры бинов и так далее. Собственно вот тут:
<bean id = "helloWorld" class = "com.antonromanov.firstspring.application.HelloWorld">
        <property name = "message" value = "Hello World!"/>

… мы сообщаем «Спрингу», вот, дескать, у нас есть бин, с id «helloWorld» (именно по нему мы потом достаем его в методе Main), находящемся в пакете com.antonromanov.firstspring.application.HelloWorld и так как у бина есть сеттер, мы прям в xml инициализируем ему переменную message значением Hello World строчкой <property name = "message" value = "Hello World!"/>

Вот, собственно и все. Мы написали наше первое Spring-приложение.

В следущий раз мы обязательно сделаем это со сборщиком Maven и перейдем от xml-конфигурации к конфигурированию аннотациями.

Видео-версия этой статьи:

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *