Spring
Spring形成了一种开发生态圈,Spring提供了若干个子项目,每个项目用于实现特定的功能
- SpringBootWeb入门
- 创建springboot工程,勾选web开发相关依赖
- 定义hellocontroll类,添加方法hello并添加注解
- 运行测试
- HTTP协议
- 概述
超文本传输协议,规定了浏览器和服务器之间数据传输的规则
基于tcp协议:面向连接,安全
基于请求-响应模型:一次请求对应一次响应
http协议是无状态的协议:对于事务处理没有记忆能力,每次请求响应都是独立的- 缺点:多次请求之间不会数据共享
- 优点:速度快
- 请求协议
请求行:请求数据的第一行(请求方式,资源路径,协议)
请求头:第二行开始,key:value
很多常见的请求数据格式,查网络;

请求体:post请求,存放请求参数
请求方式-get:请求参数在请求行中,没有请求体
请求方式-post:请求参数在请求体中,post请求大小没有限制 - 响应协议
响应行:响应数据第一行(协议,状态码:不同的状态码标识了不同的状态,描述)

响应头:第二行开始,格式:key:value

响应体:最后一部分,存放响应数据 - 协议解析
-
Web服务器-Tomcat
web服务器对http协议进行封装,简化web开发
部署web项目,对外提供网上信息浏览服务
tomcat:一个轻量级的web服务器,支持servlet,jsp等少量javaEE规范,也被称为web容器,servlet容器。 -
起步依赖
spring-boot-starter-web:web单元
spring-boot-starter-test:测试单元 -
请求响应
dispatcherservlet:前端控制器,核心控制器 -
请求:httpservletRequst:获取请求数据
1.Postman:接口测试工具,网页调试与发送网页HTTP请求的Chrome插件- 原始方式获取请求参数
- controller方法形参中声明HttpServletRequest对象
- 调用对象的getParameter(参数名)
- springboot中接受简单参数
- 请求参数名与方法形参变量名相同
- 会自动进行类型转换
- @RequestParam注解
- 方法形参名与请求参数名不匹配通过注解完成映射(name=,required=)
- 注解的required默认是true,代表请求参数必须传递
2.数组集合参数:请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接受参数
- 数组:请求参数名与形参中数组变量名相同,可以直接使用数组封装
- 集合:请求参数名与形参中集合变量名相同,通过@RequestParam绑定参数关系
3.日期参数:使用@DataTimeFormat注解完成日期参数格式的转换
4.传递json格式的参数:body-row-josn
定义实体对象接受参数,键名与属性名相同,需要使用@RequestBody标识

5.路径参数:通过url直接传递出参数,用{...}来标识该路径参数,需要用@PathVariable获取路径参数

- @RequestMapping :是 Spring MVC 中用于映射 HTTP 请求到处理方法或控制器类的注解。它可以定义请求路径、请求方式、请求参数、请求头等。
为了动态获取参数,有时会使用@PathVariable:

- @DataTimeFormat:制定前端传过来的日期格式:

- 原始方式获取请求参数
-
响应:HttpServletRequst:获取响应数据
- @ResponseBody
- 类型:方法注解,类注解
- 位置:Controller方法上/类上
- 作用:将方法返回值直接响应,如果返回值类型是实体对象/集合,将会转换为JSON格式响应
- 说明:@RestController=@Controller+@ResponseBody;
- @ResponseBody
-
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端
-
CS架构:客户端/服务器架构模式
- 概述
- 分层解耦
- 三层架构
- Controller:控制层,接受前端发送的请求,对请求进行处理,并响应数据
- service:业务逻辑层,处理具体的业务逻辑
- dao:数据访问层(Data Access Object)(持久层),负责数据访问操作,包括数据的增删查改。
- 分层解耦(软件设计原则:高内聚低耦合)
- 内聚:软件中各个功能模块内部的功能联系。
- 耦合:衡量软件中各个层、模块之间的依赖、关联程度
- IOC&DI入门(为了实现高内聚低耦合)
-
控制反转:IOC,对象的创建控制权由程序自身转移到外部(容器),这种思想被称为控制反转
-
依赖注入:DI,容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。
-
Bean对象:IOC容器中创建、管理的对象,称之为bean。

- Service层及Dao层的实现类,交给IOC容器管理
将类交给容器管理,需要加上注解(装饰器)@Component - 为Controller及Service注入运行时,所依赖的对象
将需要改造成的Bean对象注解@Autowired,实现依赖注入 - 运行测试
- Service层及Dao层的实现类,交给IOC容器管理
- IOC详解

- @Controller 标记的类会被Spring的组件扫描机制(如@ComponentScan)检测,并注册为Spring应用上下文中的一个Bean。
- 声明bean的时候可以通过value指定bean的名字,没有指定就默认为类名首字母小写。
- 使用以上四个注解都可以声明bean,但是在springboot集成web开发中,声明控制器bean只能用@Controller。
- 要想四大注解生效,必须通过组件扫描注解@ComponentsScan扫描。虽然这个注释没有显示配置,但是在启动类声明注解@SpringBootApplication中,默认扫描范围是启动类所在包及其子包。
- DI详解
- Bean注入
@Autowired注解默认是按照类型进行,如果存在多个相同类型的bean,将会报错,这个注解由spring框架提供
通过以下几种方法解决- @Primary:设置优先级,想要哪个生效就为哪个注释
- @Qualifier:指定注入的是哪个bean,按类型指定
- @Resource:指定注入的是哪个bean,按照名称指定@Resource(name=""),这个注解由JDK提供
- sping事务管理
-
事务进阶
1.在默认情况下,只有出现运行时错误时才会回滚异常,而rollbackFor属性可以控制出现何种异常时回滚事务:
2.事务传播行为:当一个事务方法被另一个事务方法调用的时候,这个事务方法应该如何进行事务控制,通过propagation属性来控制传播行为:

默认是REQUIRED,会将新事务加到当前事务中来,如果不希望事务之间互相影响,可以用REQUIRES_NEW传播行为。
-
- AOP:面向切面编程,其实就是面向特定方法编程

- 核心概念
1.连接点:JoinPoint,可以被AOP控制的方法(暗含方法执行时的相关信息)
2.通知,Advice,指哪些重复的逻辑,也就是共性功能(最终体现为一个方法)
3.切入点,pointcut,匹配连接点的条件,通知仅会在切入点方法执行时被应用
4.切面,Aspect,描述通知和切入点之间的对应关系(通知+切入点)
5.目标对象:Target,通知所应用的对象。- aop执行流程
先为目标对象生成一个代理对象,为目标对象实现方法的升级,再将代理对象注入到容器中。
- aop执行流程
- 通知类型


- 通知顺序:当有多个切面的切入点都匹配到了目标方法,目标方法运行时,多个通知方法都会被执行,考虑他们的通知顺序。

- 切入点表达式:




此处可以用或来连接多种情况。


1.首先需要自定义一个注解,这个注解是用来标识方法的
2.接下来到接口/接口实现类中为需要的方法加上注解
3.然后就可以在切面类中将pointcut中的参数修改成自定义的注解
4.要想匹配哪个方法,只需要在该方法上加上一个注解就可以了

- 连接点

其中要注意,JoinPoint是org.aspectj下的。 - AOP案例:
- 核心概念

浙公网安备 33010602011771号