Spring Boot3入门例子

Spring Boot 3 是一个基于 Spring 框架的快速开发工具,它通过自动配置和约定优于配置的原则,简化了 Spring 应用的创建和部署。在 Spring Boot 3 中,许多新特性和改进被引入,以提高开发效率和应用性能。以下是对 Spring Boot 3 的一些核心概念和常用注解的详细说明,以及相应的 …

Spring Boot 3 是一个基于 Spring 框架的快速开发工具,它通过自动配置和约定优于配置的原则,简化了 Spring 应用的创建和部署。在 Spring Boot 3 中,许多新特性和改进被引入,以提高开发效率和应用性能。以下是对 Spring Boot 3 的一些核心概念和常用注解的详细说明,以及相应的代码示例。

1. Spring Boot 3 简介

Spring Boot 3 引入了对 Java 17+ 的支持,并且对许多内部组件进行了更新和优化。它提供了更好的性能,更少的依赖和更简洁的配置。Spring Boot 3 还引入了一些新的特性,比如对 Jakarta EE 9 的支持,以及对响应式编程的改进。

2. 项目结构

一个典型的 Spring Boot 3 应用通常包含以下结构:

my-spring-boot-app
│
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── example
│   │   │           └── myapp
│   │   │               ├── MyApplication.java
│   │   │               ├── controller
│   │   │               │   └── MyController.java
│   │   │               ├── service
│   │   │               │   └── MyService.java
│   │   │               ├── repository
│   │   │               │   └── MyRepository.java
│   │   │               └── component
│   │   │                   └── MyComponent.java
│   │   └── resources
│   │       ├── application.properties
│   │       └── static
│   └── test
│       └── java
│           └── com
│               └── example
│                   └── myapp
│                       └── MyApplicationTests.java
├── pom.xml
└── README.md

3. 主类

在 Spring Boot 3 应用中,主类通常使用 @SpringBootApplication 注解,这个注解是 @Configuration@EnableAutoConfiguration@ComponentScan 的组合。

package com.example.myapp;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyApplication {

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

4. 控制器

控制器是处理 HTTP 请求和返回 HTTP 响应的组件。在 Spring Boot 3 中,可以使用 @RestController@RequestMapping 注解来创建 RESTful API。

package com.example.myapp.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello, World!";
    }
}

5. 服务

服务层通常包含业务逻辑。在 Spring Boot 3 中,可以使用 @Service 注解来标记服务类。

package com.example.myapp.service;

import org.springframework.stereotype.Service;

@Service
public class MyService {

    public String processData(String data) {
        // 业务逻辑处理
        return "Processed: " + data;
    }
}

6. 组件

组件是应用程序中的通用类,可以使用 @Component 注解来标记。

package com.example.myapp.component;

import org.springframework.stereotype.Component;

@Component
public class MyComponent {

    public void performAction() {
        // 执行某些操作
    }
}

7. 数据访问对象(Repository)

数据访问对象(Repository)是用于访问数据库的组件。在 Spring Boot 3 中,可以使用 @Repository 注解来标记。

package com.example.myapp.repository;

import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface MyRepository extends CrudRepository<MyEntity, Long> {
    List<MyEntity> findByAttribute(String attribute);
}

8. 配置类

配置类用于定义 Bean 和其他配置。在 Spring Boot 3 中,可以使用 @Configuration 注解来标记配置类。

package com.example.myapp.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AppConfig {

    @Bean
    public MyService myService() {
        return new MyService();
    }
}

9. 属性文件

Spring Boot 3 允许通过 application.propertiesapplication.yml 文件来配置应用程序。

# application.properties
server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=dbuser
spring.datasource.password=dbpass

10. 自动配置

Spring Boot 3 的自动配置机制可以根据添加的依赖自动配置应用程序。例如,添加 spring-boot-starter-web 依赖会自动配置 Tomcat 和 Spring MVC。

11. 测试

Spring Boot 3 提供了对测试的支持,可以使用 @SpringBootTest@Test 注解来编写测试。

package com.example.myapp;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;

import static org.assertj.core.api.Assertions.assertThat;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class MyApplicationTests {

    @Autowired
    private TestRestTemplate restTemplate;

    @Test
    public void testHello() {
        String result = restTemplate.getForObject("/hello", String.class);
        assertThat(result).isEqualTo("Hello, World!");
    }
}

12. 响应式编程

Spring Boot 3 支持响应式编程,可以使用 FluxMono 来处理异步数据流。

package com.example.myapp.controller;

import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;

import java.time.Duration;

@RestController
public class ReactiveController {

    @GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    public Flux<String> stream() {
        return Flux
                .interval(Duration.ofSeconds(1))
                .map(sequence -> "Event " + sequence);
    }
}

13. 安全

Spring Boot 3 提供了对 Spring Security 的支持,可以轻松地添加安全和认证。

package com.example.myapp.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public InMemoryUserDetailsManager userDetailsService() {
        UserDetails user = User.withUsername("user")
                .password("{noop}password")
                .roles("USER")
                .build();
        return new InMemoryUserDetailsManager(user);
    }

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
                .authorizeRequests(authorizeRequests ->
                        authorizeRequests
                                .anyRequest().authenticated()
                )
                .httpBasic();
        return http.build();
    }
}

14. 部署

Spring Boot 3 应用可以打包为 JAR 或 WAR 文件,并可以通过多种方式部署,如在 Tomcat、Jetty 或 Undertow 上运行,或者作为独立应用程序。

15. 总结

Spring Boot 3 提供了一套完整的工具和框架,使得开发、配置和部署 Spring 应用变得非常简单。通过使用注解和自动配置,开发者可以快速构建功能丰富的应用程序,而无需进行繁琐的配置。以上内容只是 Spring Boot 3 的一部分,还有许多其他特性和工具等待探索和使用。

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页