Java Web —— 第五天(请求响应2)
响应数据
@ResponseBody
类型:方法注解、类注解
位置: Controller方法上/类上
作用:将方法返回值直接响应,如果返回值类型是 实体对象/集合,将会转换为JSON格式响应
说明: @RestController = @Controller + @ResponseBody ;
package com.example.springboot01.controller;import com.example.springboot01.pojo.Address;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;
import java.util.List;/*** @author hyk~*/@RestController
public class ResponseController {@RequestMapping("/hello")public String hello(){System.out.println("Hello");return "hello";}@RequestMapping("/getAddr")public Address getAddr(){Address addr = new Address();addr.setCity("长沙");addr.setProvince("湖南");return addr;}@RequestMapping("/listAddr")public List<Address> listAddr(){List<Address> list = new ArrayList<>();Address addr1 = new Address();addr1.setProvince("湖北");addr1.setCity("武汉");Address addr2 = new Address();addr2.setCity("南京");addr2.setProvince("江苏");list.add(addr1);list.add(addr2);return list;}
}
不易管理 难以维护
修改代码
编写 Result
类
Result
类是一个响应结果的封装类,用于统一封装接口的返回结果。它有以下几个属性:
code
: 用于表示操作的结果,1
表示成功,0
表示失败。msg
: 提示信息,如操作成功或失败的原因。data
: 实际返回的数据,可以是任何类型的对象(Object
)。
此外,Result
类提供了多个构造方法、getter和setter方法,以及一些静态方法,用于快速生成Result
对象:
Result.success(Object data)
: 返回成功的Result
对象,并携带数据。Result.success()
: 返回成功的Result
对象,但不携带数据。Result.error(String msg)
: 返回失败的Result
对象,并携带失败信息。
package com.example.springboot01.pojo;/*** 统一响应结果封装类*/
public class Result {private Integer code;//1 成功 , 0 失败private String msg; //提示信息private Object data; //数据 datapublic Result() {}public Result(Integer code, String msg, Object data) {this.code = code;this.msg = msg;this.data = data;}public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public Object getData() {return data;}public void setData(Object data) {this.data = data;}public static Result success(Object data) {return new Result(1, "success", data);}public static Result success() {return new Result(1, "success", null);}public static Result error(String msg) {return new Result(0, msg, null);}@Overridepublic String toString() {return "Result{" +"code=" + code +", msg='" + msg + '\'' +", data=" + data +'}';}
}
ResponseController
类
package com.example.springboot01.controller;import com.example.springboot01.pojo.Address;
import com.example.springboot01.pojo.Result;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;
import java.util.List;/*** @author hyk~*/@RestController
public class ResponseController {@RequestMapping("/hello")public Result hello(){System.out.println("Hello");//return new Result(1,"success","Hello");return Result.success("Hello");}@RequestMapping("/getAddr")public Result getAddr(){Address addr = new Address();addr.setCity("长沙");addr.setProvince("湖南");return Result.success(addr);}@RequestMapping("/listAddr")public Result listAddr(){List<Address> list = new ArrayList<>();Address addr1 = new Address();addr1.setProvince("湖北");addr1.setCity("武汉");Address addr2 = new Address();addr2.setCity("南京");addr2.setProvince("江苏");list.add(addr1);list.add(addr2);return Result.success(list);}
}
类之间的关联
- 使用关系:
ResponseController
中的方法通过调用Result.success()
静态方法,生成Result
对象。这些Result
对象封装了控制器的返回结果,统一了接口的响应格式。
作用总结
-
Result
类的作用:- 提供了一个统一的响应格式,使得所有接口的返回值结构一致,便于前端解析和处理。
- 可以通过
code
来判断操作是否成功,通过msg
提示信息,通过data
传递实际的数据。
-
ResponseController
类的作用:- 处理HTTP请求,生成相应的数据或信息,并通过
Result
类封装成统一格式的响应返回给客户端。
- 处理HTTP请求,生成相应的数据或信息,并通过
1. @ResponseBody
位置: Controller类上/方法上
作用: 将方法返回值直接响应,若返回值类型是 实体对象/集合 ,转SON格式响应
2.统一响应结果
Result (code、msg、data )
案例
获取员工数据,返回统一响应结果,在页面渲染展示
加载并解析emp.xml文件中的数据,完成数据处理,并在页面展示。
在pom.xml文件中引入dom4j的依赖,用于解析XML文件
引入资料中提供的解析XML的工具类XMLParserUtils、对应的实体类Emp,XML文件emp.xml
引入资料中提供的静态页面文件,放在resources下的static目录下
编写Controller程序,处理请求,响应数据
package com.example.springboot01.controller;import com.example.springboot01.pojo.Emp;
import com.example.springboot01.pojo.Result;
import com.example.springboot01.utils.XmlParserUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;/*** @author hyk~*/@RestController
public class EmpController {@RequestMapping("/listEmp")public Result list(){//1.加载并解析emp.xml文件String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();System.out.println(file);List<Emp> empList = XmlParserUtils.parse(file, Emp.class);//2.对数据进行转换处理 -gender jobempList.stream().forEach(emp -> {//处理genderString gender = emp.getGender();if ("1".equals(gender)){emp.setGender("男");}else if ("2".equals(gender)){emp.setGender("女");}//处理job 1: 讲师, 2: 班主任 , 3: 就业指导String job = emp.getJob();if ("1".equals(job)){emp.setJob("讲师");} else if ("2".equals(job)) {emp.setJob("班主任");}else if ("3".equals(job)) {emp.setJob("就业指导");}});//3.响应数据return Result.success(empList);}}
复用性差 难以维护
三层架构
controller: 控制层,接收前端发送的请求,对请求进行处理,并响应数据
service: 业务逻辑层,处理具体的业务逻辑。
dao: 数据访问层(Data Access bject)(持久层),负责数据访问操作,包括数据的增、删、改、查
1.创建对应的包
2.编写dao数据访问层代码 数据访问操作
Empdao接口
public interface EmpDao {//获取员工列表数据public List<Emp> listEmp();
}
实现类
public class EmpDaoA implements EmpDao {@Overridepublic List<Emp> listEmp() {//1.加载并解析emp.xml文件String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();System.out.println(file);List<Emp> empList = XmlParserUtils.parse(file, Emp.class);return empList;}
}
2.service业务逻辑层 业务逻辑处理
public interface EmpService {
// 获取员工列表public List<Emp> listEmp();
}
public class EmpServiceA implements EmpService {private EmpDao empDao = new EmpDaoA();@Overridepublic List<Emp> listEmp() {//1.调用dao 获取数据List<Emp> empList = empDao.listEmp();//2.对数据进行转换处理 -gender jobempList.stream().forEach(emp -> {//处理genderString gender = emp.getGender();if ("1".equals(gender)){emp.setGender("男");}else if ("2".equals(gender)){emp.setGender("女");}//处理job 1: 讲师, 2: 班主任 , 3: 就业指导String job = emp.getJob();if ("1".equals(job)){emp.setJob("讲师");} else if ("2".equals(job)) {emp.setJob("班主任");}else if ("3".equals(job)) {emp.setJob("就业指导");}});return empList;}
}
3.controller控制层 接收请求 响应数据
@RestController
public class EmpController {private EmpService empService = new EmpServiceA();@RequestMapping("/listEmp")public Result list(){//调用Service,获取数据List<Emp> empList = empService.listEmp();//响应数据return Result.success(empList);}
}
易于管理,维护 复用性强
分层解耦
内聚:软件中各个功能模块内部的功能联系
耦合:衡量软件中各个层/模块之间的依赖、关联的程度
软件设计原则:高内聚低耦合。
控制反转: Inversion Of Control,简称IOC。对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转
依赖注入:Dependency lnjection,简称DI。容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。
Bean对象:IOC容器中创建、管理的对象,称之为bean。
IOC& DI入门
1.Service层及 Dao层的实现类,交给IOC容器管理
2.为Controller及Service注入运行时,依赖的对象
3.运行测试
示例代码
EmpServiceA类
package com.example.springboot01.service.impl;import com.example.springboot01.dao.EmpDao;
import com.example.springboot01.dao.impl.EmpDaoA;
import com.example.springboot01.pojo.Emp;
import com.example.springboot01.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import java.util.List;/*** @author hyk~*/
@Component //将当前类交给IOC容器管理 成为IOC容器中的bean
public class EmpServiceA implements EmpService {
// private EmpDao empDao = new EmpDaoA();@Autowired //运行时,IOC容器会提供该类型的bean对象,并赋值给该变量 —— 依赖注入private EmpDao empDao;@Overridepublic List<Emp> listEmp() {//1.调用dao 获取数据List<Emp> empList = empDao.listEmp();//2.对数据进行转换处理 -gender jobempList.stream().forEach(emp -> {//处理genderString gender = emp.getGender();if ("1".equals(gender)){emp.setGender("男");}else if ("2".equals(gender)){emp.setGender("女");}//处理job 1: 讲师, 2: 班主任 , 3: 就业指导String job = emp.getJob();if ("1".equals(job)){emp.setJob("讲师");} else if ("2".equals(job)) {emp.setJob("班主任");}else if ("3".equals(job)) {emp.setJob("就业指导");}});return empList;}
}
EmpDaoA类
package com.example.springboot01.dao.impl;import com.example.springboot01.dao.EmpDao;
import com.example.springboot01.pojo.Emp;
import com.example.springboot01.utils.XmlParserUtils;
import org.springframework.stereotype.Component;import java.util.List;/*** @author hyk~*/
@Component //将当前类交给IOC容器管理 成为IOC容器中的bean
public class EmpDaoA implements EmpDao {@Overridepublic List<Emp> listEmp() {//1.加载并解析emp.xml文件String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();System.out.println(file);List<Emp> empList = XmlParserUtils.parse(file, Emp.class);return empList;}
}
EmpController类
package com.example.springboot01.controller;import com.example.springboot01.pojo.Emp;
import com.example.springboot01.pojo.Result;
import com.example.springboot01.service.EmpService;
import com.example.springboot01.service.impl.EmpServiceA;
import com.example.springboot01.utils.XmlParserUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;/*** @author hyk~*/@RestController
public class EmpController {@Autowired //运行时,IOC容器会提供该类型的bean对象,并赋值给该变量 —— 依赖注入private EmpService empService;
// private EmpService empService = new EmpServiceA();@RequestMapping("/listEmp")public Result list(){//调用Service,获取数据List<Emp> empList = empService.listEmp();//响应数据return Result.success(empList);}
}
IOC容器详解
Bean的声明
要把某个对象交给IOC容器管理,需要在对应的类上加上如下注解之一
bean的名字默认为类名的首字母小写
可以通过 value 修改
注意事项
声明bean的时候,可以通过value属性指定bean的名字,如果没有指定,默认为类名首字母小写
使用以上四个注解都可以声明bean,但是在springboot集成web开发中,声明控制器bean只能
用@Controller
Bean组件扫描
1.前面声明bean的四大注解,要想生效,还需要被组件扫描注解@ComponentScan扫描
2.@ComponentScan注解虽然没有显式配置,但是实际上已经包含在了启动类声明注解
@SpringBootApplicatiol中,默认扫描的范围是启动类所在包及其子包。
声明bean的注解
@Component,@Controller, @Service,@Repository
@SpringBootApplication具有包扫描作用,默认扫描当前包及其子包
DI详解
Bean注入
@Autowired注解,默认是按照类型进行,如果存在多个相同类型的bean,将会报出如下错误
通过以下几种方案来解决:
@Primary
通过@Primary设置EmpServiceB类为优先类
@Qualifier
在@Autowired上通过@Qualifier来指定bean
@Resource
@Resource(name = "empServiceB")private EmpService empService;
依赖注入的注解
默认按照类型自动装配,@Autowired
如果同类型的bean存在多个
@Primary
@Autowired +@Qualifier("bean的名称”)
@Resource(name="bean的名称”)
@Resource 与 @Autowired区别
@Autowired 是spring框架提供的注解,而@Resource是JDK提供的注解
@Autowired 默认是按照类型注入,而@Resource默认是按照名称注入
相关文章:
Java Web —— 第五天(请求响应2)
响应数据 ResponseBody 类型:方法注解、类注解 位置: Controller方法上/类上 作用:将方法返回值直接响应,如果返回值类型是 实体对象/集合,将会转换为JSON格式响应 说明: RestController Controller ResponseBody ; package com.example.springbo…...
数据科学 - 模型检验
1. 前言 模型检验是数据科学项目中至关重要的步骤,确保模型的质量,可靠性和实用性。 模型检验的主要目的是评估模型的性能,验证其在实际应用中的效果,以及防止模型出现过拟合,欠拟合或其他潜在问题。 在日常学习工作…...
【GaussDB(DWS)】数仓部署架构与物理结构分析
数仓架构与物理结构分析 一、部署架构二、物理结构三、测试验证 一、部署架构 华为数据仓库服务DWS,集群版本8.1.3.x 集群拓扑结构: 上述拓扑结构为DWS单AZ高可靠部署架构,为减少硬件故障对系统可用性的影响,建议集群部署方案遵…...
git做版本管理的时候,中途添加了新的内容在.gitignore中,怎么让git不再跟踪
当您在 .gitignore 文件中添加了新的路径模式后,Git 将不再跟踪这些路径下的新文件。但是,如果这些路径下的文件已经被 Git 跟踪(即它们已经被提交到仓库),您需要执行一些额外的步骤来让 Git 停止跟踪这些文件。 以下…...
Unity新输入系统 之 PlayerInput(真正的最后封装部分)
本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正 首先你应该了解新输入系统的基本单位和输入配置文件 Unity新输入系统 之 InputAction(输入配置文件最基本的…...
跨部门协作:观测云在促进业务与技术团队合作中的作用
在当今的企业环境中,业务与技术团队之间的紧密合作对于推动创新和提升效率至关重要。观测云平台作为一个强大的数据监控和分析工具,在这方面发挥着至关重要的作用,它通过提供统一的数据视图和协作工具,促进了跨部门间的有效协作。…...
OceanBase V4.3 列存引擎之场景问题汇总
在OceanBase 4.3版本发布后(OceanBase社区版 V4.3 免费下载),其新增的列存引擎,及行列混存一体化的能力,可以支持秒级实时分析,引发了用户、开发者及业界人士的广泛讨论。本文选取了这些讨论中较为典型的一…...
Spring中的Aware接口及应用场景
Spring框架提供了一些Aware接口,例如ApplicationContextAware, BeanFactoryAware, EnvironmentAware等,这些接口允许你的Bean获取Spring容器的资源。 例如,如果你的Bean实现了ApplicationContextAware接口,那么Spring在启动的时候…...
设计模式 - 建造者模式
💝💝💝首先,欢迎各位来到我的博客!本文深入理解设计模式原理、应用技巧、强调实战操作,提供代码示例和解决方案,适合有一定编程基础并希望提升设计能力的开发者,帮助读者快速掌握并灵活运用设计模式。 💝💝💝如有需要请大家订阅我的专栏【设计模式】哟!我会定…...
MySQL数据分析进阶(十二)设计数据库——PART4
;※食用指南:文章内容为‘CodeWithMosh’SQL进阶教程系列学习笔记,笔记整理比较粗糙,主要目的自存为主,记录完整的学习过程。(图片超级多,慎看!) 【中字】SQL进阶教程 |…...
在 Spring Boot 中使用桥接模式实现灵活的报表生成服务
在软件开发中,桥接模式是一种结构型设计模式,用于将抽象部分与它的实现部分分离,使得这两部分可以独立变化。这种模式非常适合处理需要灵活配置和扩展的场景,比如报表生成服务。本文将详细介绍如何使用桥接模式来实现一个灵活的报…...
算法:外卖调度
题目 有N个餐厅和M个外卖员,每个餐厅在某个时间点会产生一个外卖订单,这些订单都有产生时间、所需送达时间和优先级。外卖员在空闲时会选择最优先的订单来配送,直到所有订单都被送达。具体规则如下: 对于每个餐厅的订单,优先级高…...
leetcode50. Pow(x, n),快速幂算法
leetcode50. Pow(x, n),快速幂算法 实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,xn )。 示例 1: 输入:x 2.00000, n 10 输出:1024.00000 示例 2: 输入ÿ…...
Xinstall神器来袭,轻松搞定CPA推广渠道统计!
在数字化营销日益盛行的今天,CPA(按行动付费)推广已成为众多企业营销的重要手段。然而,随着渠道流量和获客途径的不断变化,CPA推广渠道统计的痛点也日益凸显。别担心,Xinstall来帮你解决问题! …...
011 | efinance分析豆一主连期货
👉👉👉 《玩转Python金融量化专栏》👈👈👈 订阅本专栏的可以下载对应的代码和数据集 🚀 上一篇🌟 下一篇⬅️ 010 东方财富帖子标题情绪分析012 akshare分析NYBOT棉花历史数据 ➡️豆一主连期货(通常简称“豆一”)是指中国期货市场上以大豆为标的的期货合约…...
【Python】函数入门(下)
3))* ** 注意:也遵循位置传参在前面,按关键字传参在后面。 代码示例: def func(*args,**kwargs):print(args,kwargs) 该函数中的参数会自动根据传参的方式不同(即:按位置…...
git的基本概念和使用原理
Git是一个分布式版本控制系统,用于跟踪文件的更改并协调多个开发人员之间的工作。以下是Git的基本概念和使用原理及方式: 目录 基本概念 使用原理 基本操作示例 基本概念 版本库(Repository): 版本库是Git用来保存…...
手写简化版的vue-router
vue-router作为vue全家桶之一的重要插件,有必要去深究一下,今天我们就从0到1手写一个简化版本。 开始之前,我们使用路由插件时是先进行下载路由 npm i vue-router ,然后在main.js中使用app.use导入router插件。想要手写vue-rou…...
分享一个基于uni-app的蛋糕商城订购小程序的设计与实现(源码、调试、LW、开题、PPT)
💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流&…...
Python绘图入门:使用Matplotlib绘制柱状图
Python绘图入门:使用Matplotlib绘制柱状图 柱状图是一种常见的数据可视化方式,能够直观地展示不同类别之间的数据差异。在Python中,Matplotlib是一个非常强大且灵活的绘图库,它不仅能绘制简单的图表,还能创建复杂的多…...
Qt5编译qmqtt库使用MQTT协议连接华为云IOT完成数据上传与交互
一、前言 随着物联网技术的发展,越来越多的设备通过网络互相连接,形成了庞大的智能系统。这些系统能够收集、分析并响应各种数据,从而实现自动化控制和智能化管理。在这个背景下,MQTT 成为了一个广泛使用的轻量级消息传输协议,特别适用于资源受限的环境,如移动应用或远程…...
mysql速起架子
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz 下载mysql tar xvJf mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz 解压 mv mysql-8.0.21-linux-glibc2.12-x86_64 mysql-8.0 改名 去到bin目录 cd bin mkdir data gr…...
云动态摘要 2024-08-14
给您带来云厂商的最新动态,最新产品资讯和最新优惠更新。 最新优惠与活动 注册阿里云免费领云服务器_云服务器ECS_阿里云 阿里云 2024-08-14 云上试用新玩法,个人享300元免费额度,企业享660元免费额度,多种规格随心试 [免费体验…...
Elasticsearch 桶(Bucket)聚合详解及示例
在 Elasticsearch 中,桶(Bucket)聚合是一种强大的工具,它允许我们对数据进行分组并统计每组的数量。这种聚合类型对于理解数据的分布和进行分组统计非常有用。本文将详细介绍 Elasticsearch 的桶聚合,并提供完整的示例…...
Django基础知识
文章目录 新建Django项目helloworld关联数据库admin 新建Django项目 创建django-admin startproject project_name 运行 python manage.py runserver 创建app: python manage.py startapp app_name 目录: 配置文件 settings.py 路由配置 urls.py 项目管理 manage.p…...
使用 nginx 搭建代理服务器(正向代理 https 网站)指南
简介 正向代理 简介 在企业开发环境中,局域网内的设备通常需要通过正向代理服务器访问互联网。正向代理服务器充当中介,帮助客户端请求外部资源并返回结果。局域网内也就是俗称的内网,局域网外的互联网就是外网,在一些特殊场景内…...
深入解析亚马逊数据采集工具选择:Data API/Scrape API/Pangolin采集器
引言 在当今电商领域,亚马逊已成为全球最大的在线零售平台之一。随着竞争的加剧和市场的多样化,商家和企业不仅需要优秀的产品和服务,还需要通过深入的数据分析来制定更加精准的市场策略。因此,采集亚马逊站点数据已成为企业实现…...
探索Linux多样性:主流发行版及其应用场景
目录 引言 Debian:稳定性的标杆 Ubuntu:易用性的代表 Red Hat Enterprise Linux (RHEL):企业的首选 Fedora:创新的前沿 CentOS:开源的稳定之选 Arch Linux:高级用户的定制天堂 Gentoo:性…...
CentOS7.6 HAproxy-7层负载均衡集群——实施方案
目录 1、前期环境准备 1.准备4台主机 1. 设置主机名 2. 设置IP地址然后重启网卡 3. 关闭防火墙和selinux 4. 全部的服务器完成时间统一 二、配置haproxy(192.168.200.11)服务器 1. 安装haproxy 2. haproxy 配置中分成五部分内容 3. 配置HAproxy(192.168.2…...
升级ubuntu22.10到24.04
将所有kinetic换成noble,noble是24.04源,sed或手动改。 cd /etc/aptgrep -nr kinetic将old-releases.ubuntu.com替换成国内的地址,因为2210国内源没找到,没有了,但是现在更新到24.04,国内是有的。 apt up…...
泰兴做网站的公司/市场营销毕业论文
题目描述 给定一个字符串 s ,请你找出其中不含有重复字符的 最长连续子字符串 的长度。 示例 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子字符串是 “abc”,所以其长度为 3。 示例 2: 输入: s “bbbbb” 输出: 1 解释: 因…...
企划做网站/全网搜索指数
垂直方向:line-height水平方向:letter-spacing...
专门做蛋糕视频的网站/千锋教育学费一览表
做 ios 开发,NSDictionary、NSMutableDictionary,NSMutableArray、NSArray 都是很常用的容器类 Array 就不多做讨论了,今天的文章主要讨论 NSDictionary 和 NSMutableDictionary~ 以往我用 cocoa 的 Dictionary 的时候,都是选择…...
网站开发php是什么意思/域名注册需要多少钱
一。CxImage类库简介 这只是翻译了CxImage开源项目主页上的部分简介及简单使用。 CxImage类库是一个优秀的图像操作类库。它可以快捷地存取、显示、转换各种图像。有的读者可能说,有那么多优秀的图形库,如OpenIL,FreeImage,PaintLib等等,它们…...
哪个网站可以做一对一老师/aso优化技术
什么是json:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。JSON采用完全独立于语言的文本格式&…...
主机网站建设制作/益阳网络推广
一、安装JRebel插件 1. 在线安装 打开设置 File ->setting或者直接点设置的图标进入 在线下载并安装 2. 激活插件 插件默认能试用14天,可用如下方式激活。 打开idea后,看到jr图标就代表安装插件成功,还有在设置里面会多出Jrebel&#…...