![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Spring
文章平均质量分 82
技术类
郑兆辉
这个作者很懒,什么都没留下…
展开
-
Spring AOP详解笔记全网开源,学透并发只需3天
概述AOP是aspect-oriented programming的缩写,译为面向切面编程。利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得 业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。简单来说,AOP就是不修改源代码在主干功能里面添加新功能。底层原理AOP底层使用了动态代理:在有接口的时候使用JDK 动态代理、在没有接口的时候使用CGLIB字节码动态代理。JDK动态代理简介使用JDK 动态代理需要用到JDK中的Proxy类里面的newPro原创 2021-08-23 10:51:50 · 137 阅读 · 0 评论 -
SpringIOC解决循环依赖的流程图
该例子假设User1中有User2属性,User2中有User1属性,代码大致如下@Componentpublic class User1 { @Autowired private User2 user2;}@Componentpublic class User2 { @Autowired private User1 user1;}然后执行过程图大致为这里解决循环依赖的点主要是靠第三步:将user1对象提前放入三级缓存中,这样子就相当于提前把对原创 2021-08-20 17:44:19 · 121 阅读 · 0 评论 -
Spring源码分析之IOC循环依赖详解
1.什么是循环依赖?当多个Bean相互依赖时则构成了循环依赖,例如A,B两个Bean。其中A中存在属性B,B中存在属性A,当Spring在实例化A时发现A中存在属性B,就去实例化B,实例化B时又发现存在属性A,一直在循环注入依赖,导致循环依赖问题出现。2.Spring是怎么解决循环依赖的?Spring中会通过各种Bean中间状态来达到Bean还未实例化完成时提前将Bean提前注入到依赖Bean的属性中,假设说Bean有三种状态分别是青年态(一级缓存)、胚胎态(二级缓存)、小蝌蚪态(三级缓存)其中转载 2021-08-17 17:35:04 · 245 阅读 · 0 评论 -
基础-中级-高级”Java程序员面试
Java基础(对象+线程+字符+接口+变量+异常+方法)面向对象和面向过程的区别? Java 语言有哪些特点? 关于 JVM JDK 和 JRE 最详细通俗的解答 Oracle JDK 和 OpenJDK 的对比 Java 和 C++的区别? 什么是 Java 程序的主类?应用程序和小程序的主类有何不同? Java 应用程序与小程序之间有哪些差别? 字符型常量和字符串常量的区别 构造器 Constructor 是否可被 override? 重载和重写的区别? Java 面向对象编程三转载 2021-08-12 11:36:37 · 135 阅读 · 0 评论 -
Springboot中实现策略模式+工厂模式
策略模式和工厂模式相信大家都比较熟悉,但是大家有没有在springboot中实现策略和工厂模式?具体策略模式和工厂模式的UML我就不给出来了,使用这个这两个模式主要是防止程序中出现大量的IF ELSE IF ELSE....。接下来咱们直接实现,项目结构图:工厂类FactoryStrategy负责创建策略的工厂,代码比较简单,比较关键的一点是AutoWired一个Map<String, Strategy>这个会在初始化的时候将所有的Strategy自动加载到Map中,是不是很方.转载 2021-08-11 11:49:26 · 647 阅读 · 0 评论 -
spring 事务源码分析
在实际工作中,会经常碰到如下代码,以前对这些只知道底层由spring事务去管理的。多年后打开源码心中的疑惑也解开了。故写此文章对学习的一个总结,让准备或在学的小伙伴少走弯路,快速前进,升职加薪!一 事务代码配置1 db.properties配置db.main.driver=com.mysql.cj.jdbc.Driverdb.main.url=jdbc:mysql://localhost:3306/?useUnicode=true&characterEncoding=utf-8&am转载 2021-08-11 09:57:09 · 144 阅读 · 0 评论 -
SpringBean的作用域管理
建 BeanDefinition 时,就等于创建了一个配方,用于创建由 BeanDefinition 所定义的类实例。BeanDefinition 是配方的这种思想很重要,因为这意味着,与使用类一样,也可通过一个配方创建多个对象实例。有如下优点:可以控制要插入到从特定 BeanDefinition 创建的对象中的各种依赖项和配置值 可以控制从特定 BeanDefinition 创建的对象的作用域。这种方式功能强大且灵活,因为开发者可以选择通过配置创建的对象的作用域,而不必在Java类级别转载 2021-08-11 09:47:55 · 192 阅读 · 0 评论 -
讲一下SpringBoot的启动流程
现在Java的项目开发中,几乎都会引入Spring框架,甚至有人说java开发现在就是在面向Spring编程。基于Spring提供了很多的功能,可以使我们可以方便地构建出低耦合、易扩展、易维护的应用,比如:IOC、AOP、Spring Web、事务等,。但是如果我们使用原生的Spring framework来开发,我们就需要自己引入许多Spring的依赖包,如果少引入某个依赖包,就会导致我们的应用构建失败,而且如果我们需要引入一些第三方组件,比如:mybatis、redis等,我们也需要相应的去寻找合适的依转载 2021-08-10 11:21:46 · 456 阅读 · 0 评论 -
SpringBoot配置文件详解
默认配置文件配置文件名默认的配置文件名是application.properties或application.yml,两者作用是一样的,只是格式不一样而已。application.properties的格式如下: jdbc.password=123456application.yml的格式如下:jdbc: password: 123456配置文件路径默认的配置文件所处路径如下:-file:./config/ (根目录下的config目录) -file:./ (根目录转载 2021-08-10 11:16:32 · 423 阅读 · 0 评论 -
SpringSecurity + JWT 实现单点登录
一、什么是单点登陆单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统二、简单的运行机制单点登录的机制其实是比较简单的,用一个现实中的例子做比较。某公园内部有许多独立的景点,游客可以在各个景点门口单独买票。对于需要游玩所有的景点的游客,这种买票方式很不方便,需要在每个景点门口排队买票,钱包拿 进拿出的,容易丢失,很不安全。于是绝大多数游客选择在大门口买一张通转载 2021-08-10 10:57:05 · 703 阅读 · 0 评论 -
MVVM和MVC有什么区别?
前言:模型—视图—视图模型(Model-View-ViewModel,MVVM),本质上是MVC(模型—视图—控制器)的改进版,其最重要的特性是数据绑定(data binding),此外还包括依赖注入,路由配置,数据模板等一些特性。从MVC到MVVM模型—视图—控制器(Model-View-Controller,MVC)模式,在Web 1.0 时代曾被广泛应用于Web架构中,然而其诞生的时间却比Web早几年。最初,MVC被应用于桌面程序中,在PSP、JSP等脚本语言诞生之后,也逐渐成为Web开发转载 2021-08-09 10:42:40 · 451 阅读 · 0 评论 -
SpringBoot实现登录拦截器
1、SpringBoot实现登录拦截的原理 1.1、实现HandlerInterceptor接口 1.2、实现WebMvcConfigurer接口,注册拦截器 1.3、保持登录状态 2、代码实现及示例 3、效果验证 3.1、访问localhost:8081/index页面: 3.2、正确输入用户名和密码登录 3.3、再次访问localhost:8081/index 对于管理系统或其他需要用户登录的系统,登录验证都是必不可少的环节,在SpringBoot开发的项目中,通过实现拦转载 2021-08-09 10:39:42 · 5256 阅读 · 0 评论 -
一次性搞懂Spring Boot 注解原理与自动装配原理
首先,先看SpringBoot的主配置类:@SpringBootApplicationpublicclassStartEurekaApplication{publicstaticvoidmain(String[]args){SpringApplication.run(StartEurekaApplication.class,args);}}点进@SpringBootApplication来看,发现@SpringBootAppli...转载 2021-08-09 10:33:24 · 149 阅读 · 0 评论 -
深入了解 Spring Batch 框架
一. 概述spring batch 是 spring 提供的一个数据处理框架,其功能包括记录/跟踪,事务管理,作业统计,作业重启,跳过和资源管理等。它还提供了更高级的技术服务和功能,通过优化和分区技术实现极高容量和高性能的批处理作业。首先会对其框架所涉及到概念进行讲解,接着对其框架大体原理进行解读。二. 概念及原理1. JobLauncher该接口是启动任务的主要入口,其入口是 Job 实例,以及 Job 对应的参数信息。其实现类为 SImpleJobLauncher 类,其里面转载 2021-08-09 10:03:04 · 1156 阅读 · 0 评论 -
用好Spring AOP,天降大锅从容应对
最近项目进入联调阶段,服务层的接口需要和协议层进行交互,协议层需要将入参[json字符串]组装成服务层所需的json字符串,组装的过程中很容易出错。入参出错导致接口调试失败问题在联调中出现很多次,因此就想写一个请求日志切面把入参信息打印一下,同时协议层调用服务层接口名称对不上也出现了几次,通过请求日志切面就可以知道上层是否有没有发起调用,方便前后端甩锅还能拿出证据写在前面本篇文章是实战性的,对于切面的原理不会讲解,只会简单介绍一下切面的知识点切面介绍面向切面编程是一种编程范式,它作为...转载 2021-08-09 09:41:25 · 71 阅读 · 0 评论 -
华为内部顶级Spring Security全解笔记,认证授权一键搞定
最近几天在改造项目,需要将gateway整合security在一起进行认证和鉴权,之前gateway和auth是两个服务,auth是shiro写的一个,一个filter和一个配置,内容很简单,生成token,验证token,没有其他的安全检查,然后让对项目进行重构。先是要整合gateway和shiro,然而因为gateway是webflux,而shiro-spring是webmvc,所以没搞成功,如果有做过并成功的,请告诉我如何进行整合,非常感谢。那整合security呢,因为spring clou转载 2021-08-06 11:23:09 · 480 阅读 · 0 评论 -
Spring Boot中如何使用cache缓存?
前言 日常开发中,缓存是解决数据库压力的一种方案,通常用于频繁查询的数据,例如新闻中的热点新闻,本文记录Spring Boot中使用cache缓存。 工程结构代码编写 pom引入依赖,引入cache缓存,数据库使用mysql,ORM框架用jpa <!--添加springdata-cache依赖 --> <dependency> <groupId>org.springframework转载 2021-08-06 11:09:59 · 389 阅读 · 0 评论 -
Spring事务失效的原因,我找到了8种
Spring事务失效的几种原因分析:1、spring的事务注解@Transactional只能放在public修饰的方法上才起作用,如果放在其他非public(private,protected)方法上,虽然不报错,但是事务不起作用2、如果采用spring+spring mvc,则context:component-scan重复扫描问题可能会引起事务失败。如果spring和mvc的配置文件中都扫描了service层,那么事务就会失效。原因:因为按照spring配置文件的加载顺序来讲,先加载sp转载 2021-08-06 11:05:36 · 400 阅读 · 0 评论 -
一次性搞懂Spring Boot 注解原理与自动装配原理
首先,先看SpringBoot的主配置类:@SpringBootApplicationpublicclassStartEurekaApplication{publicstaticvoidmain(String[]args){SpringApplication.run(StartEurekaApplication.class,args);}}点进@SpringBootApplication来看,发现@SpringBootAppli...转载 2021-08-06 10:24:36 · 74 阅读 · 0 评论 -
Spring核心知识梳理(面试问的都在这里)
目录一.基本概念1. Java Bean与Spring Bean区别2.什么是BeanDefinition3.BeanFactory 与Application的区别4.BeanPostProcessor5.BeanFactoryProcessor二.IOC1.Bean的生命周期一.Bean创建的生命周期二.Bean销毁的生命周期2.Spring中有几种依赖注入的方式3.循环依赖一.什么是循环依赖二.三级缓存三.AOP四.Spring事务1.转载 2021-08-05 14:01:52 · 130 阅读 · 0 评论 -
Spring中的Controller和Service是线程安全的吗?
结论:不是线程安全的Spring容器中的Bean是否线程安全,容器本身并没有提供Bean的线程安全策略,因此可以说Spring容器中的Bean本身不具备线程安全的特性,但是具体还是要结合具体scope的Bean去研究。Spring 的 bean 作用域(scope)类型singleton:单例,默认作用域。 prototype:原型,每次创建一个新对象。 request:请求,每次Http请求创建一个新对象,适用于WebApplicationContext环境下。 session:会话,同转载 2021-08-04 10:42:35 · 274 阅读 · 0 评论 -
从入门到真香!用好Spring Cache公司再也不用担心我搞不定AOP了
前言今天这篇文章是比较偏“教程”一点的文章。但也由浅入深,认真地分析了源码,并且介绍了一些在使用Spring Cache中常见的问题和解决方案,肯定是比简单的入门文档更有深度一些的,相信大家看了之后会有一定的收获。为什么使用缓存前几天我在文章《我是如何把一个15分钟的程序优化到了10秒的》中,提到了一些在代码层面优化性能的方法。其中第一个就是使用缓存。使用缓存是一个很“高性价比”的性能优化方式,尤其是对于有大量重复查询的程序来说。通常来说,在WEB后端应用程序来说,耗时比较大的往往有两个地方转载 2021-08-04 10:39:17 · 107 阅读 · 0 评论 -
细品SpringBoot+Thymeleaf,这么多好玩细节
虽然现在流行前后端分离,但是后端模版在一些关键地方还是非常有用的,例如邮件模版、代码模版等。当然也不排除一些古老的项目后端依然使用动态模版。Thymeleaf 简洁漂亮、容易理解,并且完美支持 HTML5,可以直接打开静态页面,同时不新增标签,只需增强属性,这样也降低了学习成本。因此松哥今天花点时间和大家仔细分享一下 Thymeleaf。1. Thymeleaf 简介Thymeleaf 是新一代 Java 模板引擎,它类似于 Velocity、FreeMarker 等传统 Java 模板转载 2021-08-02 10:56:45 · 170 阅读 · 0 评论 -
Spring/SpringBoot常用注解总结!
1. @SpringBootApplication这里先单独拎出@SpringBootApplication 注解说一下,虽然我们一般不会主动去使用它。注:这个注解是 Spring Boot 项目的基石,创建 SpringBoot 项目之后会默认在主类加上。我们可以把 @SpringBootApplication看作是 @Configuration、@EnableAutoConfiguration、@ComponentScan 注解的集合。根据 SpringBoot 官网转载 2021-08-02 10:24:29 · 898 阅读 · 0 评论 -
Spring Boot中如何干掉if else
前言看到crossoverJie的文章《利用策略模式优化过多 if else 代码》后受到启发,可以利用策略模式简化过多的if else代码,文章中提到可以通过扫描实现处理器的自注册,我在这里介绍在Spring Boot框架中的实现方法。需求这里虚拟一个业务需求,让大家容易理解。假设有一个订单系统,里面的一个功能是根据订单的不同类型作出不同的处理。订单实体:public class OrderDTO { private String code; privat转载 2021-07-30 15:06:08 · 362 阅读 · 0 评论 -
SpringBoot中根据环境加载不同的配置的方案
前言我们的一个应用,开发上线,需要一定的流程,比如需要先在测试环境中进行测试,测试环境中有它的一整套配置,如MySQL、Redis、MQ等。测试环境测试完毕,我们会在预发环境再度测试,最后再上线,即线上环境。每个环境都有他们自己独有的一套配置,而代码逻辑都是一样,就是环境配置不一样而已。如何低耦合地分离各个环境的配置,就是我们所追求的,下面阐述下SpringBoot中的方案。方案我写了个demo,下面是它的代码结构:1.业务代码下面假定以下是业务代码,主要就是从配置文转载 2021-07-30 15:02:22 · 1098 阅读 · 0 评论 -
Spring容器初始化和解决循环依赖问题的分析
1. Spring IOC容器初始化过程:2. bean的生命周期Bean 容器找到配置文件中 Spring Bean 的定义。(beanDefintion)Bean 容器利用 Java Reflection API 创建一个Bean的实例。(执行构造方法)如果涉及到一些属性值 利用 set()方法设置一些属性值。(set属性)如果 Bean 实现了 BeanNameAware 接口,调用 setBeanName()方法,传入Bean的名字。(aware接口的相关方法)如果转载 2021-07-30 15:00:16 · 136 阅读 · 0 评论 -
Spring Boot 整合 Redis 正确地实现分布式锁
理论分布式锁是控制分布式系统之间同步访问共享资源的一种方式。是为了解决分布式系统中,不同的系统或是同一个系统的不同主机共享同一个资源的问题,它通常会采用互斥来保证程序的一致性通常的实现方式有三种:基于 MySQL 的悲观锁来实现分布式锁,这种方式使用的最少,这种实现方式的性能不好,且容易造成死锁,并且MySQL本来业务压力就很大了,再做锁也不太合适基于 Redis 实现分布式锁,单机版可用setnx实现,多机版建议用Radission基于 ZooKeeper 实现分布式锁,利用 ZooK转载 2021-07-30 14:07:21 · 335 阅读 · 0 评论 -
利用springboot+elasticSearch,实现数据高效搜索,实战开发
本文主要介绍分为以下几个部分:第一部分:环境准备,安装ElasticSearch,安装 ElasticSearch-head 插件可视化web界面 第二部分:SpringBoot 整合 ElasticSearch 开发 第三部分:CRUD 测试二、ElasticSearch 安装为了和真实环境一致,我们采用CentOS7来部署 ElasticSearch 服务。建议把所需的安装包,手动从网上下载下来,因为服务器下载 ElasticSearch 安装包速度像蜗牛……,非常非常慢~~,可能是国转载 2021-07-27 10:28:46 · 1317 阅读 · 0 评论 -
淘宝大秒系统设计详解
一些数据大家还记得2013年的小米秒杀吗?三款小米手机各11万台开卖,走的都是大秒系统,3分钟后成为双十一第一家也是最快破亿的旗舰店。经过日志统计,前端系统双11峰值有效请求约60w以上的QPS ,而后端cache的集群峰值近2000w/s、单机也近30w/s,但到真正的写时流量要小很多了,当时最高下单减库存tps是红米创造,达到1500/s。热点隔离秒杀系统设计的第一个原则就是将这种热点数据隔离出来,不要让1%的请求影响到另外的99%,隔离出来后也更方便对这1%的请求做针对性优化。针对秒杀我们转载 2021-07-27 10:24:44 · 116 阅读 · 0 评论 -
还在滥用try-catch处理异常?看看springboot的优雅实现吧
前言在平时的 API 开发过程中,总会遇到一些错误异常没有捕捉到的情况。那有的小伙伴可能会想,这还不简单么,我在 API 最外层加一个try...catch不就完事了。哈哈哈,没错。这种方法简单粗暴。指北君曾经也是这么干的,但是你转过来想一想,你会在每一个 API 入口,都去做try...catch吗?这样不是代码非常丑陋的。小伙伴开始思考,突然灵光一现,说我们实现一个 AOP 来做这事不就完了。没错,使用 AOP 来实现是最佳的选择。现在指北君就给大家来介绍介绍Spring Boot...转载 2021-07-27 10:23:34 · 679 阅读 · 0 评论 -
最简单的Spring Boot 整合ELK教程,实现日志收集
前言开发任务后,提交代码的那一刻,心情是自由自在……速度是八十迈……以为接下来是游戏、逛GAI或暖烘烘的被窝。然而,梦想何其丰满,现实何其骨干。总有测试小姐姐教你紧急刹车,回头做(改)人(bug):你这不行啊!(吃瓜群众排排坐,笑歪了嘴)我低头看了看自己的八块腹肌:行不行可不是你说了算!小姐姐也不是吃素的,撸起袖子,打开她的联想十代:你行你连连报错,毒奶队友!我:(⊙o⊙)……原来你说的是这个不行,我还以为……小姐姐一脸疑惑:以为什么?真以为自己是大神了!我清咳掉自己的尴转载 2021-07-27 09:56:14 · 2186 阅读 · 0 评论 -
SpringBoot+MybatisPlus实现CAS单点登录Demo
前言在前面已经介绍过了SSO单点登录的一些理论知识:登录那些事(一):用简单的话来讲讲SSO单点登录。今天我们就通过一个demo来实现下这个CAS系统。准备工作建表CREATE TABLE `users` ( `id` int NOT NULL AUTO_INCREMENT, `username` varchar(255) COLLATE utf8mb4_general_ci NOT NULL, `password` varchar(255) COLLATE utf8mb4_g转载 2021-07-27 09:51:55 · 301 阅读 · 0 评论 -
Spring Boot中的事务是如何实现的?
概述一直在用SpringBoot中的@Transactional来做事务管理,但是很少没想过SpringBoot是如何实现事务管理的,今天从源码入手,看看@Transactional是如何实现事务的,最后我们结合源码的理解,自己动手写一个类似的注解来实现事务管理,帮助我们加深理解。阅读说明:本文假设你具备Java基础,同时对事务有基本的了解和使用。2. 事务的相关知识开始看源码之前,我们先回顾下事务的相关知识。2.1 事务的隔离级别事务为什么需要隔离级别呢?这是因为在并发转载 2021-07-26 14:44:46 · 1337 阅读 · 0 评论 -
瞬间几千次的重复提交,我用Spring Boot+Redis扛住了
在实际的开发项目中,一个对外暴露的接口往往会面临,瞬间大量的重复的请求提交,如果想过滤掉重复请求造成对业务的伤害,那就需要实现幂等!我们来解释一下幂等的概念:任意多次执行所产生的影响均与一次执行的影响相同。按照这个含义,最终的含义就是对数据库的影响只能是一次性的,不能重复处理。如何保证其幂等性,通常有以下手段:1、数据库建立唯一性索引,可以保证最终插入数据库的只有一条数据2、token机制,每次接口请求前先获取一个token,然后再下次请求的时候在请求的header体中加上这个token,.转载 2021-07-26 14:41:52 · 102 阅读 · 0 评论 -
搞懂Spring事务失效的8大原因,可以轻松吊打面试官了
前几天发了一篇文章,里面有一个关于事务失效的问题:用 Spring 的 @Transactional 注解控制事务有哪些不生效的场景?其中有个热心粉丝留言分享了下,我觉得总结得有点经验,给置顶了:但是我觉得还是总结得不够全,今天我再总结一下,再延着这位粉丝的总结再补充完善一下,不用说,我肯定也不见得总结全,但希望可以帮忙有需要的人。1、数据库引擎不支持事务这里以 MySQL 为例,其 MyISAM 引擎是不支持事务操作的,InnoDB 才是支持事务的引擎,一般要支持事务都会使转载 2021-07-26 14:26:35 · 80 阅读 · 0 评论 -
SpringBoot+Redis分布式锁:模拟抢单
本篇内容主要讲解的是redis分布式锁,这个在各大厂面试几乎都是必备的,下面结合模拟抢单的场景来使用她;本篇不涉及到的redis环境搭建,快速搭建个人测试环境,这里建议使用docker;本篇内容节点如下:jedis的nx生成锁如何删除锁 模拟抢单动作(10w个人开抢) jedis的nx生成锁对于java中想操作redis,好的方式是使用jedis,首先pom中引入依赖:<dependency><groupId>redis.clients</grou...转载 2021-07-26 14:21:53 · 123 阅读 · 0 评论 -
看完就理解Spring中的IOC和AOP两大特征
一、spring 的优点?1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦2.可以使用容易提供的众多服务,如事务管理,消息服务等3.容器提供单例模式支持4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能5.容器提供了众多的辅助类,能加快应用的开发6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等7.spring属于低侵入式设计,代码的污染极低8.独立于各种应用服务器9.spring的DI机制降低了业务对转载 2021-07-26 14:12:42 · 599 阅读 · 0 评论 -
Docker+Jenkins+Nginx+SpringBoot自动化部署项目
Docker通过linux的namespace实现资源隔离、cgroups实现资源控制,通过写时复制机制(copy-on-write)实现了高效的文件操作,在实际开发中可用于提供一次性的环境、微服务架构的搭建、统一环境的部署。前言虽然Docker已经是风靡全球的容器技术了,统一环境避免环境问题上是Docker的主要吸引点之一,但使用时详细还是会遇到不少问题的,比如个人搭建时曾思考过这些问题:Jenkins官网既然有Docker上安装Jenkins的流程了,那我该怎么使用Jenkins.转载 2021-07-26 11:41:36 · 189 阅读 · 0 评论 -
SpringBoot入门系列(二)如何返回统一的Json数据格式
前面介绍了Spring Boot的优点,然后介绍了如何快速创建Spring Boot 项目。不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/category/1657780.html。今天来说一说Spring的@Controller和@RestController控制器, 他们是如何响应客户端请求,如何返回json数据。一、@Controller和@RestController 两种控制器Spring中有Controller,Re转载 2021-07-23 17:42:03 · 542 阅读 · 0 评论