Учебное пособие по Spring Framework: начало работы со Spring

Учебное пособие по Spring Framework Изучение

Несмотря на то, что Spring Framework часто забывают как устаревший, он по-прежнему остается популярным инструментом разработки приложений, которым пользуются корпоративные компании по всему миру. Spring предлагает беспрецедентный контроль, первоклассную безопасность и экономящую время систему зависимостей с использованием Spring Beans.

Тем не менее, Spring, как известно, труден для изучения из-за большого количества опций и сложного набора инструментов.

Сегодня мы поможем вам начать свой путь разработки Spring с учебника для начинающих о том, как и зачем использовать Spring. В конце концов, мы даже поможем вам начать работу над вашим первым весенним портфельным проектом.

Что такое Spring Framework?

Spring — это легкая среда разработки приложений с открытым исходным кодом, использующая Java Enterprise Edition (Java EE) и модель Enterprise JavaBeans (EJB).

Spring часто называют «фреймворком», потому что он поддерживает другие интегрированные фреймворки в экосистеме Java, такие как Struts, Hibernate и Tapestry. Spring поставляется во многих вариантах, которые адаптированы для конкретных целей, таких как Spring MVC, Spring Boot или Spring Security.

Spring известен своими системами внедрения зависимостей и инверсии управления (IoC), которые позволяют с легкостью создавать крупномасштабные слабосвязанные приложения. Spring особенно подходит для финансовых и корпоративных приложений благодаря своей скорости, безопасности и простоте построения транзакционных систем. Ведущими работодателями разработчиков Spring являются Citibank, eBay, Visa и JP Morgan.

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

Преимущества Spring

  • Обычный старый объект Java (POJO) : приложения Spring просто используют обычные объекты Java, а не серверы или корпоративные контейнеры. Это делает приложения более легкими.
  • Модульность IoC и MVC позволяют повторно использовать компоненты в вашем приложении без ручного управления зависимостями каждого из них.
  • Сильная поддержка экосистемы Java : Spring новаторски использует уже существующие технологии, такие как ORM-фреймворки, JEE и таймеры JDK.
  • Масштабируемые транзакции : Spring предлагает последовательный, масштабируемый интерфейс управления транзакциями как для локальных, так и для глобальных транзакций.
  • Это включает протоколы кеширования.
  • Безопасность : Простота внедрения модулей безопасности с функциями аутентификации и проверки.
  • Гибкие конфигурации : можно использовать аннотации на основе Java или конфигурацию XML.
Читайте также:  13 вопросов на собеседовании по REST API, которые вам нужно знать

Недостатки Spring

  • Сложность : Spring Framework предпочитает повышенный контроль и сложность простоте использования. Поэтому Spring сложнее подобрать, чем другие веб-фреймворки. Несмотря на то, что Spring очень мощный, он лучше всего подходит для опытных разработчиков, которые могут справиться с его крутой кривой обучения.
  • Параллельные механизмы : широкий спектр возможностей Spring означает, что одну задачу можно выполнить несколькими способами. Вам потребуется доскональное знание доступных инструментов, чтобы выбрать идеальное решение и избежать путаницы между командами.
  • Отсутствие надежной документации : в документации Spring отсутствуют четкие рекомендации по ряду тем, особенно по методам кибербезопасности. Пользователи должны бороться с распространенными атаками, такими как межсайтовый подлог и атаки с использованием сценариев.

Многие из этих недостатков были устранены с помощью изобретения модуля Spring Boot, который очень самоуверен и предназначен для микросервисных архитектур.

Большинство современных Spring-приложений построены на Boot, но есть много старых приложений, которые все еще обслуживаются давними компаниями.

Особенности Spring

  • Инверсия управления (IoC) : перекладывает ответственность за зависимости с объектов на сам фреймворк. Без IoC каждый объект должен обрабатывать свой собственный экземпляр зависимости. В IoC объект просто указывает, что ему нужна определенная зависимость, и платформа настраивает и управляет ею автоматически. Это упрощает процесс разработки приложения за счет консолидации системы зависимостей и снижения нагрузки на отдельные классы.
  • Аспектно-ориентированное программирование : Spring AOP позволяет иметь разные загрузчики классов для повышения модульности и разделения сквозных проблем.
  • Внедрение зависимостей : процесс, который Spring использует для автоматического управления зависимостями bean-компонентов. Spring проверяет, какие bean-компоненты необходимы для работы конкретного bean-компонента, и внедряет их в качестве зависимости. Spring может выполнять внедрение зависимостей с помощью конструктора или метода установки.
  • Управление жизненным циклом контейнера : автоматическое создание, управление и настройка объектов приложения.
  • Поддержка MVC : поддерживает веб-архитектуру MVC, которая разделяет функциональные возможности между уровнями модели, представления и контроллера.
  • Обработка ошибок : включает обработку исключений JDBC с системой иерархии исключений.

Архитектура и компоненты Spring

Давайте разберем основные части приложения Spring Framework, чтобы помочь вам увидеть общую картину.

Beans

Spring Beans — это экземпляры классов, которыми управляет Spring. Они являются наиболее фундаментальным компонентом программы Spring.

Традиционно объекты создают личные экземпляры своих зависимостей. Spring управляет всеми зависимостями объекта и создает экземпляр объекта в bean-компоненте после внедрения необходимых зависимостей. @ComponentАннотаций является наиболее распространенным методом определения бобов.

@Component
public class Vehicle {
}

У bean-компонентов есть установленный жизненный цикл и видимость в зависимости от их области действия. Существует шесть типов областей: синглтон, прототип, запрос, сеанс, приложение и веб-сокет. Одноэлементные и прототипные области могут использоваться в любом приложении, в то время как последние четыре области доступны только для веб-приложения.

Область видимости bean-компонента по умолчанию — singleton, в которой только один экземпляр bean-компонента создается и кэшируется в памяти. Несколько запросов к компоненту возвращают общую ссылку на один и тот же компонент. Напротив, область видимости прототипа приводит к созданию новых bean-компонентов всякий раз, когда запрос на bean-компонент выполняется в контексте приложения.

Autowiring

Метод Spring по внедрению бобов в одно и другое. Spring идентифицирует зависимость выбранного bean-компонента, ищет совпадение, а затем заполняет зависимость. @AutowiredАннотаций сообщает Spring, чтобы найти и внедрить сотрудничающий боб в другой. Если доступно более одного bean-компонента одного типа, Spring выдает ошибку.

В следующем сценарии Spring обнаруживает два bean-компонента типа Operator:

@Component
class Arithmetic(){
    @Autowired
    private Operator operator;
    //...
}
 
@Component
class Addition implements Operator {
 
}
 
@Component
class Subtraction implements Operator {
 
}

IoC Container

Контейнер IoC — это платформа, которая обеспечивает функциональность инверсии управления. Контейнер IoC управляет bean-компонентами и создает все необходимые экземпляры.

Например, у нас есть класс, Vehicleкоторый зависит от другого класса, Engine.

class Vehicle{
 
    private Engine engine;
    //...
}

С IoC программисту нужно только упомянуть зависимость, а Spring сделает все остальное. Контейнер IoC будет создавать экземпляры обоих классов и внедрять Engineих Vehicleв качестве зависимости.

Модули Spring и проекты Spring

Модули — это наборы инструментов, сгруппированные по назначению. Разработчики могут указать, какие модули помимо базового набора они хотели бы импортировать в качестве зависимостей для любого конкретного приложения.

Модули организованы в группы, называемые проектами. Каждый проект содержит модули, которые предназначены для работы на определенной платформе или типе приложения. Системы проектов и модулей помогают сохранить вашу программу легкой, поскольку вы можете загружать только те инструменты, которые используются в приложении.

Модули базовой архитектуры Spring Project показаны ниже, сгруппированные по их слоям:

Модули базовой архитектуры Spring Project показаны ниже

Контейнер Spring Core включает 4 модуля, необходимых для использования Spring: Beans, Core, Context и Spring Expression Language (SpEL). Эти модули отвечают за основные функции среды Spring, такие как инверсия управления (IoC), внедрение зависимостей, интернационализация, а также за поддержку запросов к объекту во время выполнения.

Уровень доступа / интеграции Spring Data обеспечивает поддержку взаимодействия с базами данных и управления данными. Он состоит из 4 основных частей:

  • Модуль Java Database Connectivity (JDBC), который позволяет уровню данных получать, хранить или взаимодействовать с другими системами без необходимости писать громоздкий автономный код JDBC.
  • Модуль объектно-реляционного сопоставления (ORM), который позволяет вашему веб-приложению Spring взаимодействовать с фреймворками ORM.
  • Модуль Java Messaging Service (JMS), который позволяет Spring создавать собственные сообщения и получать сообщения из других систем. Это важно для реактивных приложений.
  • Модуль преобразования объектов в XML (OXM), который предоставляет полезные функции, упрощающие преобразование файлов из объектов в XML.

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

Модуль Test обращается к сквозной проблеме модульного тестирования. Платформа Spring Test поддерживает тестирование с помощью JUnit, TestNG, а также создание фиктивных объектов для изолированного тестирования кода.

Модуль AOP предоставляет функции аспектно-ориентированного программирования, такие как перехват методов, pointcut, безопасность и функции ведения журнала. Spring имеет собственный модуль под названием Spring AOP, который предлагает базовые функциональные возможности аспектно-ориентированного программирования. Расширенная функциональность АОП может быть реализована за счет интеграции с AspectJ. АОП включает в себя комплексные проблемы бизнес-логики.

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

Например, Spring Cloud позволяет разрабатывать собственные облачные приложения, которые можно динамически настраивать и развертывать. Он предоставляет функциональные возможности для обработки общих шаблонов в распределенных системах. Другие проекты включают Spring Boot, Spring Security, Spring DAO, Spring Context и многие другие.

Начать работу с Spring

Теперь мы познакомим вас с вашим первым приложением Spring: простая система рекомендаций по фильмам. Настроить новый проект с помощью Spring Framework сложно, потому что вам нужно настроить полную архитектуру вручную, включая то, какие зависимости Apache Maven использовать, использовать ли XML или Java, и вы должны установить веб-сервер, такой как Tomcat.

Вместо этого мы будем использовать проект Spring Boot для автоматизации большей части процесса установки и использования его встроенного веб-сервера.

Как начать свой проект

Мы будем использовать Spring Initializr, чтобы быстро создать проект Spring Boot, используя его простое меню выбора. Сначала перейдите в start.spring.io. Вы найдете интерфейс меню, подобный приведенному ниже, с выбором настроек и полями метаданных.

Для этого проекта мы выберем «Maven Project»

Для этого проекта мы выберем «Maven Project», выберем Java в качестве нашего языка и выберем последнюю версию Spring Boot. На данный момент избегайте версий «SNAPSHOT», потому что они проходят альфа- или бета-тестирование. В разделе «Метаданные проекта» введите io.datajek.springbasics»GroupID» и movie-recommmender-system»ArtifactID«. Идентификатор группы и идентификатор артефакта — это в основном имя пакета и имя класса. Обычно вы добавляете зависимости модулей в разделе «Зависимости», но для этого проекта требуется только Spring по умолчанию. инструменты.

После того, как вы все ввели, нажмите «Создать», чтобы создать zip-файл с архитектурой настройки. Разархивируйте папку в желаемое место на жестком диске. Эта папка будет содержать pom.xmlфайл для импорта в Eclipse IDE. Через короткое время вы увидите следующую иерархию:

  • src/main/java где будет написан код Java
  • src/main/resources где написаны свойства приложения
  • src/test/javaгде будут написаны тесты. Теперь вы можете щелкнуть правой кнопкой мыши MovieRecommenderSystemApplication.javaи запустить его как приложение Java, чтобы получить следующий вывод консоли.

.

 .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '| '_| | '\/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.3.4.RELEASE)
2021-05-03 22:46:15.549  INFO 78 --- [           main] .b.m.d.MovieRecommenderSystemApplication : Starting MovieRecommenderSystemApplication v0.0.1-SNAPSHOT on b041f076fcbd with PID 78 (/Code/movie-recommender-system/target/movie-recommender-system-0.0.1-SNAPSHOT.jar started by root in /Code/movie-recommender-system/target)
2021-05-03 22:46:15.563  INFO 78 --- [           main] .b.m.d.MovieRecommenderSystemApplication : No active profile set, falling back to default profiles: default
2021-05-03 22:46:16.458  INFO 78 --- [           main] .b.m.d.MovieRecommenderSystemApplication : Started MovieRecommenderSystemApplication in 1.41 seconds (JVM running for 1.855)

Поздравляем, вы создали свое первое приложение Spring с помощью Spring Boot!

Добавление зависимостей

Теперь мы добавим простую реализацию рекомендателя фильмов с использованием системы зависимостей Spring. Программа примет название фильма в качестве входных данных и вернет три названия фильмов того же жанра. А пока мы жестко закодируем наш вывод, чтобы вы могли сосредоточиться на изучении структуры программы.

Сначала создайте новый класс в src/main/javanamed RecommenderImplementation.

Сначала создайте новый класс в srcmain

Затем мы добавим recommendMoviesметод в RecommenderImplementation. recommendMoviesМетод будет принимать строку заголовка фильма в качестве входных данных и возвращает три рекомендации в массиве String.

Используйте жестко запрограммированную реализацию ниже:

public String[] recommendMovies (String movie) {
    //use content based filter to find similar movies
    //return the results
    return new String[] {"M1", "M2", "M3"};
}

Теперь создайте экземпляр RecommenderImplementationкласса в MovieRecommenderSystemApplicationфайле, а затем вызовите recommendMoviesметод через RecommenderImplementationкласс.

public static void main(String[] args) {
    RecommenderImplementation recommender = new 
RecommenderImplementation();    
    String[] result = recommender.recommendMovies("Finding Dory");
    System.out.println(result);
}

Затем мы реализуем фильтрацию на основе содержимого, чтобы найти рекомендации. Чтобы не recommendMoviesзависеть от логики фильтрации, мы создадим новый класс ContentBasedFilterс вызываемым методом getRecommendations. В этом методе вы могли бы реализовать сложную фильтрацию, которая просматривает соответствующие данные, такие как история просмотров, рейтинг соответствия пользователей и т. Д. Помните об этих идеях, когда вы продолжите расширять этот проект после урока.

А пока мы жестко запрограммируем getRecommendations возврат тех же трех фильмов.

public String[] getRecommendations(String movie) {
    //logic of content based filter
    return new String[] {"Happy Feet", "Ice Age", "Shark Tale"};
}

Теперь мы можем использовать методы ContentBasedFilterкласса в RecommenderImplementationклассе. Замените предыдущую жестко запрограммированную реализацию recommendMoviesследующей реализацией на основе зависимостей.

public String[] recommendMovies(String movie) {
    ContentBasedFilter filter = new ContentBasedFilter();
    String[] results = filter.getRecommendations("Finding Dory");
    return results;
}

Наконец, мы добавим toStringметод к mainметоду, чтобы сделать массив String доступным для чтения в качестве вывода.

Ваша программа теперь будет выглядеть так:

package io.datajek.spring.basics.movierecommendersystem.lesson1;
import java.util.Arrays;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MovieRecommenderSystemApplication {
    public static void main(String[] args) {
        //SpringApplication.run(MovieRecommenderSystemApplication.class, args);
        //create object of RecommenderImplementation class
        RecommenderImplementation recommender = new RecommenderImplementation();
        //call method to get recommendations
        String[] result = recommender.recommendMovies(«Finding Dory»);
        //display results
        System.out.println(Arrays.toString(result));
    }
}

Текущая реализация тесно связана, потому что RecommenderImplementationкласс зависит от ContentBasedFilterработы. Теперь мы разделим эти компоненты, чтобы учесть несколько типов фильтрации, таких как CollaborativeFilter. Мы будем использовать абстрактный Filterинтерфейс с различными реализациями в зависимости от выбранного типа фильтра.

Spring упрощает это, автоматически создавая и управляя зависимыми экземплярами для каждого компонента. Он автоматически обнаружит отношения зависимости между нашими классами, что означает, что вы можете сосредоточиться на коде.

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

package io.datajek.spring.basics.movierecommendersystem.lesson2;
public interface Filter {
    public String[] getRecommendations(String movie);
}

Расширенные концепции Spring для изучения дальше

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

Вот некоторые новые концепции, которые можно применить к этому проекту:

  • Внедрить расширенное автоматическое подключение
  • Оптимизируйте управление ресурсами с помощью bean-объекта
  • Преобразование в веб-приложение с помощью инфраструктуры Spring Web MVC
  • Создавайте самовосстанавливающиеся системы с помощью шаблона проектирования BeanFactory.
  • Добавить поддержку реляционных баз данных с помощью шаблонов Hibernate и Java Persistence API (JPA)
Оцените статью
bestprogrammer.ru
Добавить комментарий