Рубрики
Без рубрики

Сравнение между Пружиной и Пружинным ботинком

Поймите разницу между пружиной и пружинным ботинком.

Автор оригинала: baeldung.

1. Обзор

В этом уроке мы рассмотрим различия между стандартными фреймворками Spring и Spring Boot.

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

Дальнейшее чтение:

Настройка веб-приложения Spring Boot

Миграция с весны на весну загрузки

2. Что Такое Весна?

Проще говоря, Spring framework обеспечивает комплексную инфраструктурную поддержку для разработки приложений Java .

Он упакован с некоторыми приятными функциями, такими как инъекция зависимостей, и готовыми модулями, такими как:

  • Весенний JDBC
  • Весенний MVC
  • Весенняя Безопасность
  • Весенний АОП
  • Весенний ОРМ
  • Весенний тест

Эти модули могут значительно сократить время разработки приложения.

Например, в первые дни веб-разработки Java нам нужно было написать много шаблонного кода, чтобы вставить запись в источник данных. Используя JdbcTemplate модуля Spring JDBC, мы можем сократить его до нескольких строк кода с несколькими конфигурациями.

3. Что Такое Пружинный Ботинок?

Spring Boot-это в основном расширение Spring framework, которое устраняет стандартные конфигурации, необходимые для настройки приложения Spring.

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

Вот лишь некоторые из функций Spring Boot:

  • Самоуверенные “стартовые” зависимости для упрощения сборки и конфигурации приложения
  • Встроенный сервер, чтобы избежать сложностей при развертывании приложений
  • Метрики, проверка работоспособности и внешняя конфигурация
  • Автоматическая настройка функциональности Spring – по возможности

Давайте познакомимся с обоими этими фреймворками шаг за шагом.

4. Зависимости Maven

Прежде всего, давайте рассмотрим минимальные зависимости, необходимые для создания веб-приложения с помощью Spring:


    org.springframework
    spring-web
    5.3.5


    org.springframework
    spring-webmvc
    5.3.5

В отличие от Spring, Spring Boot требует только одной зависимости для запуска и запуска веб-приложения:


    org.springframework.boot
    spring-boot-starter-web
    2.4.4

Все остальные зависимости автоматически добавляются в окончательный архив во время сборки.

Еще один хороший пример-тестирование библиотек. Обычно мы используем набор библиотек Spring Test, JUnit, Hamcrest и Mockito. В весеннем проекте мы должны добавить все эти библиотеки в качестве зависимостей.

Кроме того, в Spring Boot нам нужна только стартовая зависимость для тестирования, чтобы автоматически включать эти библиотеки.

Spring Boot предоставляет ряд стартовых зависимостей для различных модулей Spring. Некоторые из наиболее часто используемых:

  • spring-boot-starter-data-jpa
  • пружина-загрузка-стартер-безопасность
  • пружина-загрузка-стартер-тест
  • пружина-загрузка-стартер-веб
  • пружинный загрузчик-стартер-thymeleaf

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

5. Конфигурация MVC

Давайте рассмотрим конфигурацию, необходимую для создания веб-приложения JSP с использованием как Spring, так и Spring Boot.

Spring требует определения сервлета диспетчера, сопоставлений и других вспомогательных конфигураций. Мы можем сделать это, используя либо web.xml файл или инициализатор класс:

public class MyWebAppInitializer implements WebApplicationInitializer {
 
    @Override
    public void onStartup(ServletContext container) {
        AnnotationConfigWebApplicationContext context
          = new AnnotationConfigWebApplicationContext();
        context.setConfigLocation("com.baeldung");
 
        container.addListener(new ContextLoaderListener(context));
 
        ServletRegistration.Dynamic dispatcher = container
          .addServlet("dispatcher", new DispatcherServlet(context));
         
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/");
    }
}

Нам также необходимо добавить аннотацию @EnableWebMvc в класс @Configuration и определить распознаватель представлений для разрешения представлений, возвращаемых контроллерами:

@EnableWebMvc
@Configuration
public class ClientWebConfig implements WebMvcConfigurer { 
   @Bean
   public ViewResolver viewResolver() {
      InternalResourceViewResolver bean
        = new InternalResourceViewResolver();
      bean.setViewClass(JstlView.class);
      bean.setPrefix("/WEB-INF/view/");
      bean.setSuffix(".jsp");
      return bean;
   }
}

Для сравнения, Spring Boot нужно всего несколько свойств, чтобы все работало, как только мы добавим веб-стартер:

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

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

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

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

5.1. Настройка Механизма Шаблонов

Теперь давайте узнаем, как настроить механизм шаблонов Thymeleaf как в Spring, так и в Spring Boot.

Весной нам нужно добавить зависимость thymeleaf-spring 5 и некоторые конфигурации для viewresolver:

@Configuration
@EnableWebMvc
public class MvcWebConfig implements WebMvcConfigurer {

    @Autowired
    private ApplicationContext applicationContext;

    @Bean
    public SpringResourceTemplateResolver templateResolver() {
        SpringResourceTemplateResolver templateResolver = 
          new SpringResourceTemplateResolver();
        templateResolver.setApplicationContext(applicationContext);
        templateResolver.setPrefix("/WEB-INF/views/");
        templateResolver.setSuffix(".html");
        return templateResolver;
    }

    @Bean
    public SpringTemplateEngine templateEngine() {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(templateResolver());
        templateEngine.setEnableSpringELCompiler(true);
        return templateEngine;
    }

    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        ThymeleafViewResolver resolver = new ThymeleafViewResolver();
        resolver.setTemplateEngine(templateEngine());
        registry.viewResolver(resolver);
    }
}

Spring Boot 1 требует только зависимости spring-boot-starter-thymeleaf для включения Thymeleaf поддержка в веб-приложении. В связи с новыми функциями в Thymeleaf3.0, мы также должны добавить thymeleaf-layout-dialect в качестве зависимости в веб-приложении Spring Boot 2. В качестве альтернативы мы можем добавить зависимость spring-boot-starter-thymeleaf , которая позаботится обо всем этом для нас.

Как только зависимости будут установлены, мы можем добавить шаблоны в папку src/main/resources/templates , и весенняя загрузка отобразит их автоматически.

6. Конфигурация безопасности Пружины

Для простоты мы рассмотрим, как с помощью этих фреймворков включена базовая аутентификация HTTP по умолчанию.

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

Spring требует как стандартных spring-security-web , так и spring-security-config зависимостей для настройки безопасности в приложении.

Далее нам нужно добавить класс, который расширяет WebSecurityConfigurerAdapter и использует аннотацию @EnableWebSecurity :

@Configuration
@EnableWebSecurity
public class CustomWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
 
    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
          .withUser("user1")
            .password(passwordEncoder()
            .encode("user1Pass"))
          .authorities("ROLE_USER");
    }
 
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
          .anyRequest().authenticated()
          .and()
          .httpBasic();
    }
    
    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

Здесь мы используем inMemoryAuthentication для настройки аутентификации.

Spring Boot также требует, чтобы эти зависимости работали, но нам нужно только определить зависимость | spring-boot-starter-security , так как это автоматически добавит все соответствующие зависимости в путь к классу.

Конфигурация безопасности в Spring Boot такая же, как и выше.

Чтобы увидеть, как конфигурация JPA может быть достигнута как в Spring, так и в Spring Boot, мы можем ознакомиться с нашей статьей Руководство по JPA с Spring .

7. Загрузка приложения

Основное различие в начальной загрузке приложения в Spring и Spring Boot заключается в сервлете. Spring использует либо web.xml или SpringServletContainerInitializer в качестве точки входа начальной загрузки.

С другой стороны, Spring Boot использует только функции сервлета 3 для начальной загрузки приложения. Давайте поговорим об этом подробнее.

7.1. Как пружинят Бутстрапы?

Spring поддерживает как наследие, так и web.xml способ начальной загрузки, а также последний метод сервлета 3+.

Давайте посмотрим на web.xml подход поэтапный:

  1. Контейнер сервлета (сервер) читает web.xml.
  2. DispatcherServlet , определенный в web.xml создается экземпляром контейнера.
  3. DispatcherServlet создает WebApplicationContext путем чтения WEB-INF/{Имя сервлета}-servlet.xml.
  4. Наконец, DispatcherServlet регистрирует компоненты, определенные в контексте приложения.

Вот как Spring bootstraps использует подход Servlet 3+:

  1. Контейнер ищет классы, реализующие ServletContainerInitializer , и выполняет.
  2. SpringServletContainerInitializer находит все классы, реализующие WebApplicationInitializer.
  3. WebApplicationInitializer создает контекст с помощью XML или @Configuration классов.
  4. WebApplicationInitializer создает DispatcherServlet с ранее созданным контекстом.

7.2. Как Пружинные Загрузочные Загрузчики?

Точкой входа приложения Spring Boot является класс, который аннотируется @SpringBootApplication :

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

По умолчанию Spring Boot использует встроенный контейнер для запуска приложения. В этом случае Spring Boot использует точку входа public static void main для запуска встроенного веб-сервера.

Он также заботится о привязке сервлета, фильтра, и ServletContextInitializer бобов из контекста приложения к встроенному контейнеру сервлета.

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

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

@SpringBootApplication
public class Application extends SpringBootServletInitializer {
    // ...
}

Здесь внешний контейнер сервлета ищет Основной класс, определенный в файле META-INF веб-архива, и SpringBootServletInitializer позаботится о привязке сервлета, фильтра, и ServletContextInitializer.

8. Упаковка и развертывание

Наконец, давайте посмотрим, как можно упаковать и развернуть приложение. Обе эти платформы поддерживают общие технологии управления пакетами, такие как Maven и Gradle; однако, когда дело доходит до развертывания, эти платформы сильно отличаются.

Например, плагин Spring Boot Maven обеспечивает поддержку Spring Boot в Maven. Он также позволяет упаковывать исполняемые файлы jar или военные архивы и запускать приложение “на месте”.”

Некоторые из преимуществ Spring Boot перед Spring в контексте развертывания включают в себя:

  • Обеспечивает поддержку встроенного контейнера
  • Подготовка к самостоятельному запуску банок с помощью команды java -jar
  • Возможность исключения зависимостей, чтобы избежать потенциальных конфликтов jar при развертывании во внешнем контейнере
  • Возможность указать активные профили при развертывании
  • Генерация случайных портов для интеграционных тестов

9. Заключение

В этой статье мы узнали о различиях между Spring и Spring Boot.

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