Учебные материалы

Урок 1: Cоздание каркаса Spring-приложения

Этот урок освещает создание каркаса Spring-приложения.

Что вы создадите

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

Что вам потребуется

  • Любимый текстовый редактор или IDE
  • JDK 7 и выше
  • Maven 3.0+

Настройка проекта

Для начала вам необходимо настроить базовый скрипт сборки. В этом уроке рассмотрим код для работы с Maven. Если вы не знакомы с ним, то ознакомьтесь с соответсвующим уроком Сборка Java-проекта с использованием Maven.

Создание структуры каталогов

В выбранном вами каталоге проекта создайте следующую структуру каталогов:

└── src
    └── main
        └── java

Создание файла сборки Maven

Ниже представлен начальный файл сборки Maven, который вы должны создать и поместить в каталог проекта со следующим содержимым:

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>spring-projects.guides</groupId>
    <artifactId>spring-lessons</artifactId>
    <version>1.0-SNAPSHOT</version>
</project>

На данном этапе проект совсем пустой и без зависимостей. По команде mvn clean install должен появиться каталог target, в котором будет jar-файл проекта.

Добавление модулей Spring Framework

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

Первое, что нам необходимо, это добавить модуль для работы с контекстом и Dependency Injection(DI). Делается это так же, как и для всех остальных зависимостей для Maven в ваш pom.xml:

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.1.5.RELEASE</version>
    </dependency>
</dependencies>

Аналогичным образом добавляются другие модули, только вместо spring-context подставляется название необходимого модуля. Если же вы хотите загружать версии модулей с оригинального сайта, то вам необходимо указать расположение репозитория в вашей Maven конфигурации:

<repositories>
    <repository>
        <id>io.spring.repo.maven.release</id>
        <url>http://repo.spring.io/release/</url>
        <snapshots><enabled>true</enabled></snapshots>
    </repository>
</repositories>

Если вам необходимо добавить все или достаточно большое количество модулей одной и той же версии, либо вообще разных, то в Maven это можно сделать достаточно просто, просто добавить следующий фрагмент в вашу Maven конфигурацию:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-framework-bom</artifactId>
            <version>4.1.5.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

При этом по-умолчанию версия Spring-модулей будет установлена в 4.1.5.RELEASE и вы можете убрать <version>4.1.5.RELEASE</version> в описании каждого из модулей, либо вообще указать другую версию, более раннюю, если, к примеру, в модуле версии по-умолчанию нет того функуционала, какой есть в более ранней.

Логгирование

По умолчанию, Spring Framework, в частности модуль spring-core использует для логгирования стандартную реализациею Jakarta Commons Logging API (JCL) common-logging, поэтому вам нет необходимости беспокоиться об этой функциональности и о том, что приложение не может быть собрано из-за этой зависимости в других модулях. Однако, если вам по каким-то причинам необходимо использовать другой инструмент логгирования, к примеру, SLF4J, то существуют несколько способов для этого:

  • Исключить зависимость из spring-core модуля
  • Некоторые другие способы, описанные в SLF4J FAQ

Для исключения стандартной зависимости по первому способу вам необходимо добавить новые зависимости в секцию dependencyManagement в вашей Maven конфигурации:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.1.5.RELEASE</version>
    <exclusions>
        <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Либо добавить к модулю spring-core или зависящему от него модулю подобное. Должно выглядеть примерно так:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <exclusions>
        <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Теперь для использования SLF4 вам необходимо добавить в вашу Maven конфигурацию следующее:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>1.5.8</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.5.8</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.5.8</version>
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.14</version>
</dependency>

Однако более распостраненным способом является использование Logback:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>1.5.8</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.1.2</version>
</dependency>

Многие также используют Log4j, Spring предоставляет некоторые утилиты для настройки и инициализации Log4j. Для того, чтобы сделать этот инструмент логгирования по умолчанию, необходимо добавить в ваш корневой каталог приложения конфигурационные файлы(log4j.properties или log4j.xml) и добавить в вашу Maven конфигурацию следующее:

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.14</version>
</dependency>

Ниже приведет пример log4j.properties. Более подробную информацию по настройке, а также использованию Log4j 2.x вы можете найти в документации самого Log4j.

log4j.rootCategory=INFO, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %t %c{2}:%L - %m%n

log4j.category.org.springframework.beans.factory=DEBUG

Итог

Поздравляем! Вы только что создали каркасный проект будущего Spring-приложения.

comments powered by Disqus