Урок 39: Введение в Spring Framework
Spring Framework — это мощный и гибкий фреймворк для разработки корпоративных приложений на Java. Он предоставляет комплексные решения для различных аспектов разработки, таких как управление зависимостями, обработка данных, безопасность и создание веб-приложений. В этом уроке мы рассмотрим основы Spring Framework, включая создание простого приложения с использованием Spring IoC (Inversion of Control) контейнера.
Создание простого Spring-приложения
Spring IoC контейнер управляет созданием и жизненным циклом объектов, предоставляя инверсию управления. Рассмотрим пример простого Spring-приложения:
// 1. Добавление зависимости в pom.xml для Maven-проекта
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.8</version>
</dependency>
// 2. Создание класса компонента
import org.springframework.stereotype.Component;
@Component
public class HelloWorld {
public void sayHello() {
System.out.println("Hello, Spring!");
}
}
// 3. Создание конфигурационного класса
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {
}
// 4. Создание основного класса приложения
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class MainApp {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
HelloWorld helloWorld = context.getBean(HelloWorld.class);
helloWorld.sayHello();
}
}
Результат выполнения
Упражнения
Упражнение 1: Создание компонента и использование его в приложении
Создайте компонент GreetingService
, который будет выводить приветственное сообщение. Измените основной класс приложения для использования этого компонента.
Решение:
import org.springframework.stereotype.Component;
@Component
public class GreetingService {
public void greet() {
System.out.println("Welcome to Spring!");
}
}
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {
}
public class MainApp {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
GreetingService greetingService = context.getBean(GreetingService.class);
greetingService.greet();
}
}
Объяснение: Компонент GreetingService
добавлен в проект, и основной класс приложения изменен для использования этого компонента.
Упражнение 2: Внедрение зависимостей через конструктор
Создайте два компонента: MessageService
, который будет предоставлять сообщение, и MessagePrinter
, который будет использовать MessageService
для печати сообщения. Используйте внедрение зависимостей через конструктор.
Решение:
import org.springframework.stereotype.Component;
@Component
public class MessageService {
public String getMessage() {
return "Dependency Injection in Spring!";
}
}
@Component
public class MessagePrinter {
private final MessageService messageService;
public MessagePrinter(MessageService messageService) {
this.messageService = messageService;
}
public void printMessage() {
System.out.println(messageService.getMessage());
}
}
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {
}
public class MainApp {
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
MessagePrinter messagePrinter = context.getBean(MessagePrinter.class);
messagePrinter.printMessage();
}
}
Объяснение: Компонент MessageService
предоставляет сообщение, а MessagePrinter
использует этот компонент для печати сообщения, используя внедрение зависимостей через конструктор.