[Оригинал] Spring Tutorial 01 -- Spring Beginning_Helloworld

Java задняя часть Spring модульный тест

до начала

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

Обзор

Введение в весну:

Spring FrameWork теперь выпустила Spring 5.0; Spring Framework представляет собой полнофункциональную среду приложений.

Особенности весны:

  • Легкий: по сравнению с контейнером EJB контейнер IoC, используемый Spring, очень легкий, а базовая версия среды Spring весит всего около 2 МБ. Spring позволяет разработчикам разрабатывать приложения корпоративного уровня, используя только POJO (обычный старый объект Java, в отличие от EJB). Преимущество этого заключается в том, что вам не нужно использовать раздутый EJB-контейнер (сервер приложений), вам нужен только легкий контейнер сервлетов (например, Tomcat). Особенно в некоторых разработках, когда памяти и ресурсов ЦП не хватает, использование Spring более экономно, чем EJB, для разработки и развертывания приложений.
  • Инверсия управления (IOC): Spring использует технологию инверсии управления для достижения слабой связи. Вместо создания или поиска зависимых объектов зависимости внедряются в объекты. Аспектно-ориентированное программирование (АОП): Spring поддерживает аспектно-ориентированное программирование, отделяя при этом бизнес-логику приложения от системных сервисов.
  • MVC Framework: Spring MVC — очень хорошая среда MVC, которая может заменить другие веб-фреймворки, такие как Struts. Интеграция: Spring очень легко интегрировать и разрабатывать с другими популярными фреймворками, в число которых входят: фреймворк ORM, фреймворк ведения журналов, JEE, Quartz и фреймворки уровня представления, такие как Struts.
  • Управление транзакциями: мощные возможности управления транзакциями Spring могут обрабатывать локальные транзакции (одна база данных) или глобальные транзакции (несколько данных, используя JTA). Разделение модулей: среда Spring состоит из модулей. Хотя пакетов и классов уже слишком много, все они разбиты по модулям, вам нужно только учитывать модули, которые вы будете использовать, и игнорировать остальные модули.
  • Обработка исключений: поскольку многие методы в Java JDBC, Hibernate и других API генерируют проверенные исключения, многие разработчики не могут хорошо обрабатывать исключения. Spring предоставляет унифицированный API для преобразования этих проверенных исключений в непроверенные исключения Spring.
  • Модульное тестирование: код, написанный Spring, очень легко выполнить модульное тестирование, а внедрение зависимостей можно использовать для внедрения тестовых данных в программу.

История весны

Прямая публикация статей обновлена ​​до Spring Framwork 5.0; если вы хотите ознакомиться с функциями других версий, рекомендуется обратиться к сообщению в блоге «Изменения исторической версии Spring и сегодняшняя экологическая империя».

  • обновление JDK
    Изначально планировалось, что Spring Framework 5.0 будет выпущен поверх Java 9, теперь же минимальное требование для фреймворка — Java 8.
  • Основные исправления фреймворка
    Пересмотрено на основе новых функций, представленных в Java 8:
  • Благодаря улучшениям отражения в Java 8 доступ к параметрам метода в Spring Framework 5.0 стал более эффективным.
  • Базовый интерфейс Spring теперь предоставляет необязательные объявления, основанные на методах Java 8 по умолчанию. использовать
  • Аннотации @Nullable и @NotNull для отображения параметров, допускающих значение NULL, и возвращаемых значений. Этого достаточно для обработки нулей во время компиляции вместо того, чтобы генерировать исключения NullPointerException во время выполнения.

На основе аспекта ведения журнала:

  • Spring Framework 5.0 содержит инкапсуляцию связующего модуля Commons Logging под названием spring-jcl вместо стандартного Commons Logging. Конечно, новая версия также будет автоматически определять Log4j 2.x, SLF4J, JUL (java.util.logging) без каких-либо дополнительных соединений.
  • Обновление основного контейнера

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

  • Функциональное программирование с Kotlin

Введена поддержка языка JetBrains Kotlin. Kotlin — это объектно-ориентированный язык, поддерживающий функциональный стиль программирования. Kotlin работает на JVM, но среда выполнения не ограничивается JVM.

Автор не очень хорошо знаком с языком Kotlin, много комментировать не буду.

  • модель реактивного программирования

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

Последующее обсуждение этой темы;Spring WebFlux

  • Тестовые улучшения

Spring Framework 5.0 полностью поддерживает JUnit 5 Jupiter, поэтому JUnit 5 можно использовать для написания тестов и расширений. Помимо предоставления модели программирования и расширения, подпроект Jupiter предоставляет механизм тестирования для запуска тестов на основе Jupiter в Spring. Кроме того, Spring Framework 5 предоставляет расширения для параллельного тестирования в Spring TestContext Framework.
Для модели реактивного программирования spring-test теперь также поддерживает интеграционный тест Spring WebFlux WebTestClient, аналогичный MockMvc, для которого не требуется работающий сервер. Используя фиктивный запрос или ответ, WebTestClient может напрямую связываться с серверным средством WebFlux.

  • поддержка библиотеки

В настоящее время Spring Framework 5.0 поддерживает следующие версии обновленных библиотек:

  • В настоящее время Spring Framework 5.0 поддерживает следующие версии обновленных библиотек:
  • Jackson 2.6+
  • EhCache 2.10+ / 3.0 GA
  • Hibernate 5.0+
  • JDBC 4.0+
  • XmlUnit 2.x+
  • OkHttp 3.x+
  • Netty 4.1+
  • Прекращена поддержка

На уровне API Spring Framework 5.0 больше не поддерживает следующие пакеты:

  • beans.factory.access
  • jdbc.support.nativejdbc
  • mock.staticmock для модуля spring-aspects
  • web.view.tiles2M (требуется минимум 3 тайла)
  • orm.hibernate3 и orm.hibernate4.

В настоящее время поддерживается Hibernate 5.

  • Portlet.
  • Velocity.
  • JasperReports.
  • XMLBeans.
  • JDO.
  • Guava.
    Если вы используете какой-либо из вышеперечисленных пакетов, рекомендуется поддерживать версию Spring Framework 4.3.x.

быстрый старт

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

среда разработки

  • затмение или ИДЕЯ
  • JDK8 (рекомендуется)/7
  • Spring Framwork5

Начинать

  1. Создайте проект Maven; каталог проекта выглядит следующим образом:

  2. Helloworld с использованием аннотаций:

файл pom.xml:

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

hello/MessageService.java

package hello.annotation;

public interface MessageService {
    String getMessage();
}

hello/MessagePrinter.java

package hello.annotation;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class MessagePrinter {

    final private MessageService service;

    @Autowired
    public MessagePrinter(MessageService service) {
        this.service = service;
    }

    public void printMessage() {
        System.out.println(this.service.getMessage());
    }
}

hello/Application.java

package hello.annotation;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.*;

@Configuration
@ComponentScan
public class Application {

    @Bean
    MessageService mockMessageService() {
        return new MessageService() {
            public String getMessage() {
              return "Hello World!";
            }
        };
    }

  public static void main(String[] args) {
      ApplicationContext context = 
          new AnnotationConfigApplicationContext(Application.class);
      MessagePrinter printer = context.getBean(MessagePrinter.class);
      printer.printMessage();
  }
}
  1. Используйте конфигурацию файла xml: applicationContext.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="MessageService" class="hello.xml.MessageService">
       <property name="message" value="Hello World!"/>
   </bean>
</beans>

MessageService.java

package hello.xml;

public class MessageService {
	private String message;

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

}

Application.java

package hello.xml;

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

public class Application {
	public static void main(String[] args) {
		ApplicationContext application = new ClassPathXmlApplicationContext("applicationContext.xml");
		MessageService messageService = application.getBean(MessageService.class);
		System.out.println(messageService.getMessage());
	}
}

4. Результат выполнения:

运行结果

Кратко объясните:

  1. Согласно файлу конфигурации известно, что класс конфигурации инициализирует контейнер ApplicationContext.
  2. Внедрить объект Bean (MessageService) в соответствии с конфигурацией
  3. Создание экземпляра контейнера динамически создает объекты Bean На самом деле, выше; нижний уровень использует режим создания фабрики; контейнер Spring единообразно создает и управляет объектами Java Bean; конкретный анализ будет объяснен позже.

Использованная литература: