Этой статьей я продолжаю свои уроки по 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.
Добавим наш первый Бин.
Щелкаем правой кнопкой мыши на названии пакета 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>
Осталось запустить программу и получить в консоли:

Теперь, в кратце что мы сделали простыми словами:
- Main — это класс нашего консольного приложения, содержащий метод public static void main(String[] args). Именно этот метод Java-машина воспринимает как «точка входа в программу». Именно через него JVM реализует «выполнение» вышего приложения.
- В этом методе мы используем ClassPathXmlApplicationContext (и это не единственный способ) как способ сообщить DI-контейнеру Спринга как будет происходить конфигурирование бинов. В данном случае мы указываем ему, что конфигурирование будет происходить с помощью файла Beans.xml, лежащего в application path. ApplicationContext — это интерфейс, определяющий контекст нашего приложения. В свою очеред контекст приложения — это его главный интерфейс, определяющий всю онфигурацию Spring-приложения.
- Вот этой строчкой «HelloWorld obj = (HelloWorld) context.getBean(«helloWorld»);» мы «достаем» из контекста наш Бин HelloWorld. Но достаем именно средствами Dependency Injection, а не прямым наследованием или созданием инстанса. Зачем это нужно, мы поговорим в других статьях.
- Весь 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-конфигурации к конфигурированию аннотациями.
Видео-версия этой статьи: