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 应用通常包含以下结构:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
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
的组合。
1
2
3
4
5
6
7
8
9
10
11
12
|
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。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
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
注解来标记服务类。
1
2
3
4
5
6
7
8
9
10
11
12
|
package com.example.myapp.service;
import org.springframework.stereotype.Service;
@Service
public class MyService {
public String processData(String data) {
// 业务逻辑处理
return "Processed: " + data;
}
}
|
6. 组件
组件是应用程序中的通用类,可以使用 @Component
注解来标记。
1
2
3
4
5
6
7
8
9
10
11
|
package com.example.myapp.component;
import org.springframework.stereotype.Component;
@Component
public class MyComponent {
public void performAction() {
// 执行某些操作
}
}
|
7. 数据访问对象(Repository)
数据访问对象(Repository)是用于访问数据库的组件。在 Spring Boot 3 中,可以使用 @Repository
注解来标记。
1
2
3
4
5
6
7
8
9
10
11
|
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
注解来标记配置类。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
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.properties
或 application.yml
文件来配置应用程序。
1
2
3
4
5
|
# 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
注解来编写测试。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
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 支持响应式编程,可以使用 Flux
和 Mono
来处理异步数据流。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
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 的支持,可以轻松地添加安全和认证。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
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 的一部分,还有许多其他特性和工具等待探索和使用。