重写mvc部分,换成boot入门

This commit is contained in:
many2many 2024-11-01 10:14:25 +08:00
parent 95680afb74
commit c551c6a1cf

View File

@ -558,18 +558,7 @@ Java 内置的 `List` 和 `Map` 类型都支持泛型,可以用来存储任意
- **5.x**: 重点改进了对反应式编程模型的支持引入了Spring WebFlux框架。 - **5.x**: 重点改进了对反应式编程模型的支持引入了Spring WebFlux框架。
- **最新版本**: 截至2024年Spring框架的最新版本为6.x系列持续增加了对现代Web开发趋势的支持如微服务架构、云原生应用等。 - **最新版本**: 截至2024年Spring框架的最新版本为6.x系列持续增加了对现代Web开发趋势的支持如微服务架构、云原生应用等。
#### 5.2.2 Spring框架的核心特性 #### 5.2.2 Spring的家族框架
- **依赖注入 (DI)**:
- **定义**: 是一种设计模式,用于实现对象之间的解耦,让对象不需要直接创建依赖对象,而是由容器负责创建并注入。
- **好处**: 降低了组件之间的耦合度,提高了代码的可测试性和可维护性。
- **面向切面编程 (AOP)**:
- **定义**: 一种编程范式,用于将横切关注点(如日志记录、事务管理)从业务逻辑中分离出来。
- **好处**: 通过切面编程,可以在不修改业务逻辑代码的情况下添加或修改功能。
- **模块化**: Spring框架被设计成高度模块化的用户可以根据需要选择使用不同的模块。
- **可扩展性**: Spring框架提供了许多扩展点允许开发者根据需要自定义行为。
- **广泛的应用场景**: 从简单的Web应用到复杂的企业级应用Spring都能提供解决方案。
#### 5.2.3 Spring的家族框架
- **Spring Boot**: 提供了一个快速搭建Spring应用的方式通过自动化配置、依赖管理和启动器简化了开发过程。 - **Spring Boot**: 提供了一个快速搭建Spring应用的方式通过自动化配置、依赖管理和启动器简化了开发过程。
- **Spring Cloud**: 用于构建分布式系统和服务网格,提供了一系列工具和服务,如服务注册与发现、配置中心、熔断器等。 - **Spring Cloud**: 用于构建分布式系统和服务网格,提供了一系列工具和服务,如服务注册与发现、配置中心、熔断器等。
- **Spring Data**: 提供了一套数据访问抽象层,简化了数据访问层的开发工作,支持各种数据库技术。 - **Spring Data**: 提供了一套数据访问抽象层,简化了数据访问层的开发工作,支持各种数据库技术。
@ -579,7 +568,7 @@ Java 内置的 `List` 和 `Map` 类型都支持泛型,可以用来存储任意
- **Spring WebFlux**: 用于构建非阻塞的、事件驱动的Web应用和服务器端应用支持反应式编程模型。 - **Spring WebFlux**: 用于构建非阻塞的、事件驱动的Web应用和服务器端应用支持反应式编程模型。
- **Spring Web**: 提供了构建Web应用程序所需的支持包括HTTP消息处理、多部分文件上传等功能以及与Spring MVC的紧密集成。 - **Spring Web**: 提供了构建Web应用程序所需的支持包括HTTP消息处理、多部分文件上传等功能以及与Spring MVC的紧密集成。
#### 5.2.4 Spring的应用场景和优势 #### 5.2.3 Spring的应用场景和优势
- **应用场景**: - **应用场景**:
- **Web应用**: Spring MVC框架为构建高性能的Web应用提供了基础。 - **Web应用**: Spring MVC框架为构建高性能的Web应用提供了基础。
- **企业级应用**: Spring框架适合构建复杂的企业级应用包括业务流程管理、数据处理等。 - **企业级应用**: Spring框架适合构建复杂的企业级应用包括业务流程管理、数据处理等。
@ -594,7 +583,7 @@ Java 内置的 `List` 和 `Map` 类型都支持泛型,可以用来存储任意
- **性能**: Spring框架经过优化能够高效地运行大规模应用。 - **性能**: Spring框架经过优化能够高效地运行大规模应用。
- **社区活跃**: Spring框架有一个活跃的社区不断更新以适应新的技术和标准。 - **社区活跃**: Spring框架有一个活跃的社区不断更新以适应新的技术和标准。
#### 5.2.5 Spring Web #### 5.2.4 Spring Web
- **概述**: Spring Web 是 Spring Framework 的一部分它为构建Web应用程序提供了必要的支持。Spring Web 包含了多个子模块旨在提供一套完整的Web开发解决方案。 - **概述**: Spring Web 是 Spring Framework 的一部分它为构建Web应用程序提供了必要的支持。Spring Web 包含了多个子模块旨在提供一套完整的Web开发解决方案。
- **子模块**: - **子模块**:
- **Spring Web**: 为Web开发提供了一些基本的支持比如HTTP消息转换、多部分文件上传、Web应用上下文等。 - **Spring Web**: 为Web开发提供了一些基本的支持比如HTTP消息转换、多部分文件上传、Web应用上下文等。
@ -611,6 +600,28 @@ Java 内置的 `List` 和 `Map` 类型都支持泛型,可以用来存储任意
- **Web Services Support**: 支持构建和消费Web服务包括SOAP和RESTful服务。 - **Web Services Support**: 支持构建和消费Web服务包括SOAP和RESTful服务。
- **WebSocket Support**: 提供了WebSocket的支持用于实现实时双向通信。 - **WebSocket Support**: 提供了WebSocket的支持用于实现实时双向通信。
#### 5.2.5 Spring Boot
Spring Boot 是 Spring Framework 的一个子项目,旨在简化 Spring 应用的开发。一些关键特性:
- **自动配置Auto Configuration**
Spring Boot 的自动配置能够根据类路径中的依赖、定义的 Bean 以及各种配置属性,自动配置 Spring 应用的基础设施和功能。
- **内嵌服务器**
Spring Boot 提供了内嵌的 Tomcat、Jetty 和 Undertow 服务器,这样开发者无需外部配置服务器即可运行 Web 应用。
- **起步依赖Starters**
Spring Boot 提供了一系列 "起步依赖",这些依赖将常用的库和配置打包在一起,简化了项目的依赖管理。例如,`spring-boot-starter-web` 包含了开发 Web 应用所需的所有依赖,如 Spring MVC、内嵌的 Tomcat 等.
- **产品级特性**
强大的日志管理功能、健康检查和监控、安全管理、配置管理
- **集成第三方库和框架**
Spring Boot 提供了丰富的集成选项,使得开发者可以轻松地将第三方库和框架集成到应用程序中。
这些特性使得 Spring Boot 成为一个强大的框架,帮助开发者快速构建和部署高质量的 Spring 应用程序。
### 5.3 Spring IoC(掌握) ### 5.3 Spring IoC(掌握)
#### 5.3.1 IoC #### 5.3.1 IoC
@ -627,15 +638,57 @@ Spring IoC容器负责管理对象的生命周期、依赖关系以及配置信
通过使用框架提供的注解或者XML配置Spring可以轻松地定义和管理Bean。 通过使用框架提供的注解或者XML配置Spring可以轻松地定义和管理Bean。
- **生命周期**: 在Spring框架中有多种注解可以用来定义一个类为Spring Bean。以下是一些常用的注解
- **初始化**: 包括默认初始化、自定义初始化等。
- **销毁**: 包括默认销毁、自定义销毁等。 **@Component** - 这是一个通用的注解用于标记任何轻量级的、可由Spring IoC容器管理的组件。
**@Service** - 通常用于业务层组件,表示服务逻辑的实现。
**@Repository** - 用于数据访问层组件比如DAOData Access Object用于处理数据存储相关的逻辑。
**@Controller** - 用于表现层组件特别是用在Web应用中作为控制器。
**@Configuration** - 标记配置类,这类类中的方法可以使用@Bean注解来定义和初始化bean。
**@RestController** - 组合了@Controller和@ResponseBody两个注解用于构建RESTful Web服务。
**@Bean** - 虽然不是直接用来标注类的,但是当与@Configuration一起使用时可以在配置类的方法上声明以创建和初始化bean。
通过使用上述注解之一Spring框架会在启动时自动扫描这些带有注解的类并将它们注册为Spring容器中的bean。这样就可以利用Spring的依赖注入Dependency Injection, DI和其他特性来管理和使用这些bean了。
- **注解方式定义Bean的示例**: - **注解方式定义Bean的示例**:
```java ```java
@Component @Component
public class MyBean { public class MyBean {
}
```
```java
@Component
public class MyService {
}
```
```java
@RestController
public class MyController {
}
```
- **XML配置方式定义Bean**:
```xml
<bean id="myBean" class="com.example.MyBean"/>
```
- **生命周期**:
- **初始化**: 包括默认初始化、自定义初始化等。
- **销毁**: 包括默认销毁、自定义销毁等。
```java
@Component
public class MyBean {
public MyBean() { public MyBean() {
System.out.println("MyBean created."); System.out.println("MyBean created.");
} }
@ -649,12 +702,7 @@ Spring IoC容器负责管理对象的生命周期、依赖关系以及配置信
public void destroy() { public void destroy() {
System.out.println("MyBean destroyed."); System.out.println("MyBean destroyed.");
} }
} }
```
- **XML配置方式定义Bean**:
```xml
<bean id="myBean" class="com.example.MyBean"/>
``` ```
#### 5.3.4 Bean的作用域 #### 5.3.4 Bean的作用域
@ -840,72 +888,9 @@ public class MyService {
- **@Inject**JSR-330标准注解用于依赖注入可以与Spring集成使用。 - **@Inject**JSR-330标准注解用于依赖注入可以与Spring集成使用。
- **@Resource**JSR-250标准注解通常用于按名称注入Bean。 - **@Resource**JSR-250标准注解通常用于按名称注入Bean。
### 5.4 Spring AOP(了解)
### 5.4 Spring MVC(掌握) #### 5.4.1 AOP的基本概念
#### 5.4.1 Spring MVC概述
- **定义**: Spring MVC是Spring web框架的一部分基于Model-View-Controller (MVC) 模式,用于构建Web应用。
- **特点**:
- **请求处理**: 通过@Controller注解来定义控制器。
- **视图解析**: 通过ViewResolver来解析视图。
#### 5.4.2 使用@Controller定义控制器
- **定义**: 使用`@Controller`注解定义控制器类。
- **示例**:
```java
@Controller
public class HelloController {
@RequestMapping("/hello")
public String hello(Model model) {
model.addAttribute("message", "Hello, Spring MVC!");
return "hello";
}
}
```
#### 5.4.3 使用@RequestMapping处理请求
- **定义**: 使用`@RequestMapping`注解来映射请求路径。
- **示例**:
```java
@Controller
public class HelloController {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello(@RequestParam String name, Model model) {
model.addAttribute("message", "Hello, " + name + "!");
return "hello";
}
}
```
#### 5.4.4 使用@ResponseBody返回JSON响应
- **定义**: 使用`@ResponseBody`注解来直接返回JSON响应。
- **示例**:
```java
@Controller
public class HelloController {
@RequestMapping(value = "/hello-json", method = RequestMethod.GET)
@ResponseBody
public Map<String, String> helloJson(@RequestParam String name) {
Map<String, String> response = new HashMap<>();
response.put("message", "Hello, " + name + "!");
return response;
}
}
```
#### 5.4.5 使用Spring Data JPA进行数据访问
- **定义**: Spring Data JPA是Spring Data项目的一部分用于简化JPA的数据访问。
- **示例**:
```java
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
User findByUsername(String username);
}
```
### 5.5 Spring AOP(了解)
#### 5.5.1 AOP的基本概念
- **概念**: - **概念**:
@ -923,7 +908,7 @@ public class MyService {
- **通知 (Advice)**: 在特定连接点join point处由切面aspect执行的操作。不同的通知类型包括“环绕”around、“前置”before和“后置”after通知。许多AOP框架包括Spring都将通知建模为拦截器并在连接点周围维持一个拦截器链。 - **通知 (Advice)**: 在特定连接点join point处由切面aspect执行的操作。不同的通知类型包括“环绕”around、“前置”before和“后置”after通知。许多AOP框架包括Spring都将通知建模为拦截器并在连接点周围维持一个拦截器链。
- **切面 (Aspect)**: 一个跨越多个类的关注点的模块化。事务管理是J2EE应用中一个很好的横切关注点的例子。在Spring AOP中切面是使用普通的类基于模式的方法或使用@Aspect注解的普通类@AspectJ风格来实现的。 - **切面 (Aspect)**: 一个跨越多个类的关注点的模块化。事务管理是J2EE应用中一个很好的横切关注点的例子。在Spring AOP中切面是使用普通的类基于模式的方法或使用@Aspect注解的普通类@AspectJ风格来实现的。
#### 5.5.2 使用AspectJ进行切面编程 #### 5.4.2 使用AspectJ进行切面编程
- **定义**: AspectJ是一种常用的AOP框架提供了强大的切面编程能力。 - **定义**: AspectJ是一种常用的AOP框架提供了强大的切面编程能力。
- **示例**: - **示例**:
```java ```java
@ -973,8 +958,99 @@ public class MyService {
} }
``` ```
### 5.6 构建工具 ### 5.5 Spring Boot入门(掌握)
#### 5.5.1 快速创建Spring boot项目
- 使用官方在线工具[start.spring.io](https://start.spring.io)创建初始项目
- 将生成的zip文件在本机解压
- 在idea中打开项目
- 修改maven仓库地址,使用国内源加快下载速度在build.gralde文件中添加如下配置:
```groovy
repositories {
mavenLocal()
maven { url 'https://mirrors.cloud.tencent.com/nexus/repository/maven-public/' }
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://maven.aliyun.com/repository/public' }
mavenCentral()
}
```
- 刷新gradle,下载依赖包
- 运行项目
#### 5.5.2 创建控制器
**示例**:
```java
@RestController
@RequestMapping("/hello")
public class HelloController {
@GetMapping
public String hello() {
return "Hello World";
}
@GetMapping("/json")
public Map<String,String> json() {
Map<String,String> data = new HashMap<>();
data.put("code","200");
data.put("message","Hello World");
return data;
}
}
```
#### 5.5.3 控制器中常用注解
- **@RestController注解 **
> @RestController注解是Spring Boot框架中的一个注解用于标识一个类是一个RESTful风格的控制器Controller。它结合了@Controller和@ResponseBody注解的功能使得编写RESTful风格的控制器更加简单和方便。
>具体来说,@RestController注解的作用包括
> - 将类标记为RESTful控制器方便Spring Boot框架自动扫描和注册。
> - 将所有方法的返回值自动转换为JSON格式并通过HTTP响应返回给客户端。
> - 简化了编写RESTful控制器的过程不需要再使用@Controller和@ResponseBody注解。
- **@RequestMapping注解**
> @RequestMapping注解用于映射HTTP请求到控制器的处理方法上。它可以应用在类或方法上,用于指定处理请求的路径和请求方法。
> 应用在类上,@RequestMapping注解表示这个类中的所有处理方法都共享相同的请求路径前缀
> 在方法级别上,@RequestMapping注解用于指定处理请求的具体路径和请求方法。
- **http method对应的注解应用在方法上**
> @GetMapping用于处理HTTP GET请求。它可以接受一个URI模式参数用于指定处理的请求路径。当客户端发送GET请求到对应的URI时Spring Boot将会通过该注解所标注的方法来处理请求并返回相应的数据。
> @PostMapping则是专门处理HTTP POST请求的注解它是@RequestMapping(method = RequestMethod.POST)的缩写形式。与@GetMapping类似它接受一个URI模式参数用于指定处理的请求路径。客户端向指定的URI发送POST请求时Spring Boot将会根据该注解所标注的方法来处理请求并返回相应结果。
> @PutMapping注解用于处理HTTP PUT请求将请求映射到具体的处理方法中。它是一个组合注解相当于@RequestMapping(method = RequestMethod.PUT)的快捷方式。通过该注解可以指定请求的URI、请求参数、响应类型等信息当客户端向指定URI发送PUT请求时Spring Boot会自动找到对应的处理方法进行处理并返回响应数据。
> @DeleteMapping则用于处理HTTP DELETE请求它也是一个组合注解相当于@RequestMapping(method = RequestMethod.DELETE)。它可以将HTTP DELETE请求映射到Spring Boot中的消费者方法实现删除特定资源的功能。类似于@PutMapping@DeleteMapping也支持设置请求的URI、请求参数、响应类型等信息
- **获得Request请求参数的注解**
> @PathVariable、@RequestBody和@RequestParam是三个常用的注解它们分别用于获取并处理HTTP请求中的路径变量、请求体和请求参数。
> @PathVariable注解用于处理URI路径中的占位符参数即将URI中的某个部分作为参数传递给对应的控制器方法。例如/users/{id}表示URI路径中的id部分是一个路径变量我们可以在控制器方法中使用@PathVariable("id")注解来获取该值,并进行相应的业务操作。
> @RequestBody注解用于获取HTTP请求的请求体通常用于接收JSON格式的数据。当客户端向后端发送POST请求时使用该注解可以将请求体中的数据绑定到Java对象上从而方便地进行数据处理。
> @RequestParam注解用于获取HTTP请求中的查询参数,例如?name=John&age=20。使用该注解可以将查询参数值绑定到对应的控制器方法的参数中并进行相应的业务操作。需要注意的是@RequestParam注解默认情况下是必需的即如果没有传递对应的查询参数则会抛出异常。如果想要将其设置为可选的可以在注解中添加required=false属性。
### 5.6 构建工具
构建工具Build Tools是软件开发过程中用于自动化构建、测试和打包软件应用程序的工具。它们通常用于编译源代码、运行测试、生成文档、打包应用程序以及执行其他与构建过程相关的任务。 构建工具Build Tools是软件开发过程中用于自动化构建、测试和打包软件应用程序的工具。它们通常用于编译源代码、运行测试、生成文档、打包应用程序以及执行其他与构建过程相关的任务。