Spring

Spring形成了一种开发生态圈,Spring提供了若干个子项目,每个项目用于实现特定的功能

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

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

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

      响应体:最后一部分,存放响应数据
    4. 协议解析
    • 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插件

      • 原始方式获取请求参数
        1. controller方法形参中声明HttpServletRequest对象
        2. 调用对象的getParameter(参数名)
      • springboot中接受简单参数
        1. 请求参数名与方法形参变量名相同
        2. 会自动进行类型转换
      • @RequestParam注解
        1. 方法形参名与请求参数名不匹配通过注解完成映射(name=,required=)
        2. 注解的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;
    • BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端

    • CS架构:客户端/服务器架构模式

  • 分层解耦
    1. 三层架构
    • Controller:控制层,接受前端发送的请求,对请求进行处理,并响应数据
    • service:业务逻辑层,处理具体的业务逻辑
    • dao:数据访问层(Data Access Object)(持久层),负责数据访问操作,包括数据的增删查改。
    1. 分层解耦(软件设计原则:高内聚低耦合)
    • 内聚:软件中各个功能模块内部的功能联系。
    • 耦合:衡量软件中各个层、模块之间的依赖、关联程度
    1. IOC&DI入门(为了实现高内聚低耦合)
    • 控制反转:IOC,对象的创建控制权由程序自身转移到外部(容器),这种思想被称为控制反转

    • 依赖注入:DI,容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。

    • Bean对象:IOC容器中创建、管理的对象,称之为bean。

      1. Service层及Dao层的实现类,交给IOC容器管理
        将类交给容器管理,需要加上注解(装饰器)@Component
      2. 为Controller及Service注入运行时,所依赖的对象
        将需要改造成的Bean对象注解@Autowired,实现依赖注入
      3. 运行测试
    1. IOC详解
    • @Controller 标记的类会被Spring的组件扫描机制(如@ComponentScan)检测,并注册为Spring应用上下文中的一个Bean。
    • 声明bean的时候可以通过value指定bean的名字,没有指定就默认为类名首字母小写。
    • 使用以上四个注解都可以声明bean,但是在springboot集成web开发中,声明控制器bean只能用@Controller。
    • 要想四大注解生效,必须通过组件扫描注解@ComponentsScan扫描。虽然这个注释没有显示配置,但是在启动类声明注解@SpringBootApplication中,默认扫描范围是启动类所在包及其子包。
    1. DI详解
    • Bean注入
      @Autowired注解默认是按照类型进行,如果存在多个相同类型的bean,将会报错,这个注解由spring框架提供
      通过以下几种方法解决
      1. @Primary:设置优先级,想要哪个生效就为哪个注释
      2. @Qualifier:指定注入的是哪个bean,按类型指定
      3. @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执行流程
        先为目标对象生成一个代理对象,为目标对象实现方法的升级,再将代理对象注入到容器中。
    • 通知类型

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




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


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

      其中要注意,JoinPoint是org.aspectj下的。
    • AOP案例:
posted @ 2025-03-23 15:46  听天  阅读(37)  评论(0)    收藏  举报