文章目录
- [1 Spring Boot概述](#1 Spring Boot概述)
- [2 Spring Boot入门](#2 Spring Boot入门)
-
- [2.1 项目搭建](#2.1 项目搭建)
- [2.2 入门程序](#2.2 入门程序)
- [3 数据请求与响应](#3 数据请求与响应)
-
- [3.1 数据请求](#3.1 数据请求)
- [3.2 数据响应](#3.2 数据响应)
- [4 分层解耦](#4 分层解耦)
-
- [4.1 三层架构](#4.1 三层架构)
- [4.2 控制反转](#4.2 控制反转)
- [4.3 依赖注入](#4.3 依赖注入)
- [5 参考资料](#5 参考资料)
1 Spring Boot概述
Spring是Java EE编程领域的一个轻量级开源框架,是为了解决企业级编程开发中的复杂性,实现敏捷开发的应用型框架,它集成各类型的工具,通过核心的Bean factory实现了底层的类的实例化和生命周期的管理。
Spring发展到今天已经形成一种生态圈,其中最基础、最核心的是 Spring Framework。但直接基于SpringFramework进行开发存在配置繁琐、入门难度大等问题。而Spring Boot可以帮助我们非常快速的构建应用程序、简化开发、提高效率。
2 Spring Boot入门
2.1 项目搭建
在IDEA中选择[文件]→[新建]→[项目],选择生成器中的Spring Boot,设置相关的名称、位置、语言、类型、组、工件等信息,指定所需要的依赖项,联网完成创建。
2.2 入门程序
在com.example
包下创建子包controller
,在子包内创建和定义请求处理类HelloController
。
java
package com.example.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello(){
System.out.println("Hello World~");
return "Hello World~";
}
}
运行Spring Boot自动生成的启动类SpringbootWebQuickstartApplication
,在浏览器中输入http://localhost:8080/hello
运行测试。
@RestController注解:包括@Controller和@ResponseBody两个注解。
@Controller注解:标识一个Java类为控制器,负责接收请求、处理请求,并返回响应。
@ResponseBody注解:将方法返回值直接响应给浏览器,如果返回值类型是实体对象/集合,将会转换为JSON格式后在响应给浏览器。
3 数据请求与响应
3.1 数据请求
-
简单参数:对原始的API进行了封装,接收参数的形式更加简单。
java@RestController public class RequestController { @RequestMapping("/simpleParam") public String simpleParam(String name, Integer age ){ System.out.println(name+":"+age); return "OK"; } }
-
实体参数:将请求参数封装到一个实体类对象中,保证请求参数名与实体类的属性名相同,按照对象层次结构关系即可接收嵌套实体类属性参数。
java@RestController public class RequestController { @RequestMapping("/pojoParam") public String simplePojo(User user){ System.out.println(user); return "OK"; } }
-
数组参数:请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数。
java@RestController public class RequestController { @RequestMapping("/arrayParam") public String arrayParam(String[] hobby){ System.out.println(Arrays.toString(hobby)); return "OK"; } }
-
集合参数:请求参数名与形参集合对象名相同且请求参数为多个,使用@RequestParam绑定参数关系。
java@RestController public class RequestController { @RequestMapping("/listParam") public String listParam(@RequestParam List<String> hobby){ System.out.println(hobby); return "OK"; } }
-
日期参数:通过@DateTimeFormat注解,以及其pattern属性来设置日期的格式。
java@RestController public class RequestController { @RequestMapping("/dateParam") public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){ System.out.println(updateTime); return "OK"; } }
-
JSON参数:JSON是开发中最常用的前后端数据交互方式,JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要使用@RequestBody注解将JSON数据映射到形参的实体类对象中。
java@RestController public class RequestController { @RequestMapping("/jsonParam") public String jsonParam(@RequestBody User user){ System.out.println(user); return "OK"; } }
-
路径参数:直接在请求的URL中传递参数。
java@RestController public class RequestController { @RequestMapping("/path/{id}") public String pathParam(@PathVariable Integer id){ System.out.println(id); return "OK"; } }
3.2 数据响应
统一响应结果使用类来描述,在这个结果中包含响应状态码(当前请求是成功或失败)、状态码信息(给页面的提示信息)、返回的数据(给前端响应的数据)。
java
public class Result {
private Integer code;//响应码
private String msg; //响应码
private Object data; //响应数据
public Result() { }
public Result(Integer code, String msg, Object data) {
this.code = code;
this.msg = msg;
this.data = data;
}
...
//查询 成功响应示例
public static Result success(Object data){
return new Result(1,"success",data);
}
}
4 分层解耦
4.1 三层架构
基于三层架构的程序执行流程:
-
前端发起的请求,由Controller层接收(Controller响应数据给前端)
-
Controller层调用Service层来进行逻辑处理(Service层处理完后,把处理结果返回给Controller层)
-
Serivce层调用Dao层(逻辑处理过程中需要用到的一些数据要从Dao层获取)
-
Dao层操作文件中的数据(Dao拿到的数据会返回给Service层)
在软件设计中,我们要做到"高内聚、低耦合",不直接new一个不同层的新对象,而是提供一个容器,容器中存储一些对象,controller程序从容器中获取Service层需要调用的类型的对象。
4.2 控制反转
控制反转(Inversion Of Control,简称IOC):对象的创建控制权由程序自身转移到外部容器,对象的创建权由程序员主动创建转移到由容器创建、管理对象(bean对象),这个容器称为IOC容器或Spring容器。
Spring框架为了更好的标识开发中bean对象的归属,又提供了@Component的衍生注解。
-
@Controller :标注在控制层类上
-
@Service:标注在业务层类上
-
@Repository:标注在数据访问层类上。
在IOC容器中,每一个Bean都有一个属于自己的名字,可以通过注解的value属性指定bean的名字。如果没有指定,默认为类名首字母小写。
在开发过程中,推荐将controller,service,dao等都放在引导类所在包的子包下,确保定义的bean会被自动的扫描到。
4.3 依赖注入
依赖注入(Dependency Injection,简称DI):容器为应用程序提供运行时所依赖的资源,程序运行时需要某个资源,此时容器就为其提供这个资源。
@Autowired注解:按照类型进行自动装配,去IOC容器中找某个类型的对象,然后完成注入操作。
为了解决IOC容器中存在多个相同类型的bean对象而报错的问题,可以选择使用@Primary注解(在类前添加确定默认的实现)、@Qualifier(配合@Autowired指定当前要注入的bean对象)、@Resource(通过name属性指定要注入的bean的名称)。
@Autowird 与 @Resource的区别
@Autowired 是spring框架提供的注解,而@Resource是JDK提供的注解
@Autowired 默认是按照类型注入,而@Resource是按照名称注入