Springboot-SpringCloud学习

文章目录

    • web项目开发历史
  • Springboot注解
    • A
      • @Aspect
      • @Autowired
      • @AllargConstructor
      • @Around
    • B
      • @Bean
      • @Builder
    • C
      • @Configuration
      • @ConditionalOnMissingBean
      • @Component
      • @ComponentScan
    • D
      • @Documented
      • @Data
    • E
      • @EnableWebSecurity
      • @EqualsAndHashCode
      • @ExceptionHandler
    • F
    • G
      • @Getter
    • H
    • I
      • @interface
      • @Inherited
    • J
    • K
    • L
      • @Log4j
    • M
      • @MapperScan
    • N
      • @NoArgsConstructor
      • @Nullable
    • O
      • @Overrride
    • P
      • @PostConstruct
      • @Primary
    • R
      • @Retention(RetentionPolicy.RUNTIME)
      • @RestController
      • @RequestMapping
      • @ResponseBody
      • @RestControllerAdvice
      • @ResponseStatus
    • S
      • @Slf4j
      • @Service
      • @SpringBootApplication
      • @Setter
    • T
      • @Target(ElementType.PARAMETER)
      • @TableName
      • @TableId
      • @TableFiled
    • V
      • @Value
    • X
      • @Xxljob
  • SpringBoot
    • Spring以及Springboot是什么
    • 微服务+第一个Springboot项目
    • 自动配置与编写 yaml
    • 自动装配原理
    • 集成 web开发(业务核心)
    • 集成 数据库 Druid
    • 分布式开发:Dubbo(RPC) + zookeeper
    • swagger:接口文档
    • 任务调度
    • SpringSecurit:Shiro
    • Linux项目部署
  • SpringCloud
    • springcloud入门
    • Restful 接口风格
    • Eureka 服务注册与发现
    • Ribbon 负载均衡
    • Feign 负载均衡
    • HyStrix 服务容灾
    • Zuul路由网关
    • SpringCloud config:git
  • 具体实际代码学习
    • 请求参数分析

web项目开发历史

servlet+tomcat

struts

ssm架构

Spring+SpringMVC+MyBatis
打包上线采用war包,并在tomcat上运行;

SpringBoot架构

打包上线采用jar包,且已内嵌tomcat服务;

tomcat

1. Tomcat是常见的免费的web服务器。
2. 是否使用tomcat打开html的区别:
使用:则可以通过 http://12306.com/index.html 形式打开网站;
不使用:则需要通过 file:d:/test.html  形式 打开本地网站;
3. 8080 是tomcat的默认端口号

Springboot注解

A

@Aspect

定义切面 = 将那些影响了多个类的公共行为抽取到一个可重用模块里。

@Autowired

可以对类成员变量、方法及构造函数进行标注,让 spring 完成 bean 自动装配的工作。

  1. 注解修饰成员属性,则无需使用set方法,就可以实现对属性的设置。
public class 当前类{
@Autowired 
private 接口 对象名;
}
// 表示将对象名 引入 当前类;
本质采用的是java的反射机制实现,将成员对象注入到具体对象。

@AllargConstructor

注在类上,提供类的全参数构造函数;

@Around

环绕通知,可以说是使用最频繁的方式,会将整个方法(此方法)包围起来。
参数execution=设置此方法的调用情况。

execution(<修饰符模式><返回类型模式><方法名模式><参数模式><异常模式>?)
除了返回类型模式,方法名模式和参数模式外,其余都是可选填项。修饰符模式 = 表示哪类型方法(publc、privateprotected等),不写就是所有方法;
返回类型模式 = 表示返回值的类型;
包名 = 具体的包名

也就com.unicom.opn.api.core.controller…* 包及其子包都会调用@Around注释的方法。

execution(* com.unicom.opn.api.core.controller..*.*(..)))修饰符模式 = 没有书写,说明是所有方法;
返回值类型 = * 表示全部类型
包名 = com.unicom.opn.api.core.controller 具体的包名
.. = 表示包以及包下所有子包
* = 表示全部
.*(..) = 表示全部方法

B

@Bean

修饰方法的注解,告诉方法,产生一个Bean对象,并交由Spring管理。

@Builder

注解为类 生成相对复杂的构造器API。
具体的构造函数:全参数构造方法。

C

@Configuration

用于定义配置类,可替换xml配置文件;
被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。

@ConditionalOnMissingBean

用于判断指定的类是否在BeanFactory中;
指定的类如果在BeanFactory中,则匹配失败;不在,则匹配成功;
匹配成功则,执行方法。
当BeanFactory中没有指定的bean的时候才能匹配,主要是用来做自动配置的,当程序没有配置指定的类的时候,就会使用默认配置;

@ConditionalOnMissingBean(ObjectMapper.class)
public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder)
// 当Bean工厂没有ObjectMapper的Bean,才创建jacksonObjectMapper的Bean。

@Component

定义Spring管理Bean = 被该注解修饰的类都交由Spring管理。

@ComponentScan

用于类或接口上,主要是指定扫描路径;
spring会把指定路径下带有指定注解的类自动装配到bean容器里。
扫描被@Controller、@Service、@Component、@Repository等注解标注的类。

D

@Documented

生成javadoc的时候是否会被记录,该注解存在-被记录;反之,不被记录。

@Data

  1. 使用前提:
    在项目依赖中引入lombok,其是一个工具类库,以简化代码,提高开发效率;
  2. 含义
    修饰类,提供类get、set、equals、hashCode、canEqual、toString方法。

E

@EnableWebSecurity

开启SpringSecurity的默认行为,为某些请求路径开启安全认证策略。

@EqualsAndHashCode

注在类上,提供对应的equals和hashCode方法;
注解中的属性:of、callSuper。
of = 表示在equals、hashcode方法中是否会使用of数组中指定的属性;
of属性值只能填写子类中的属性;

callSuper = 表示在equals、hashcode方法中是否会引用当前类的父类中的属性;

@ExceptionHandler

注在方法上,注解名后的括号=指明要捕获哪些异常,该方法 = 指明对异常进行如何处理。

F

G

@Getter

注在类上,提供该类所有属性的get方法;
注在属性上,提供该属性的get方法。

H

I

@interface

使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口。

public @interface RequestJson {String value() default "";
}
// 其中,RequestJson是注解名,@interface表示自定义注解。
// @interface声明一个注解,定义成员变量与类型;
// 方法名 = 成员变量名;方法返回值 = 变量类型;

@Inherited

J

K

L

@Log4j

注在类上,提供对应的Logger对象,变量名为log

M

@MapperScan

指定包下面的所有接口,在编译之后生成相应的实现类。
该注解可以告诉MyBatis框架在哪里扫描Mapper接口,并将其注册为一个Spring的Bean,使得Mapper接口可以被自动注入到其他组件中,便于省略手动配置Mapper接口实现类的步骤。
案例:

@MapperScan("com.unicom.opn.api.dao.mapper")
@ComponentScan("com.unicom")
@SpringBootApplication
public class App {public static void main(String[] args) {SpringApplication.run(App.class, args);}
}

扫描com.unicom.opn.api.dao.mapper下的Mapper接口,编译生成对应的实现类;
SpringBoot在启动时自动扫描该路径的Mapper接口,将其注册为Spring的Bean,使得其他组件中可以直接注入。

N

@NoArgsConstructor

注在类上,提供无参构造方法。

@Nullable

可以注在方法、属性、参数上,分别表示方法的返回值为空、属性值为空、参数值为空。

O

@Overrride

是Java5的元数据,自动加上去的一个标志,告诉你说下面这个方法是从父类/接口 继承过来的,需要你重写一次,这样就可以方便你阅读,也不怕会忘记

P

@PostConstruct

被@PostConstruct注解的方法在项目启动的时候执行这个方法,即在spring容器启动的时候执行。

@Primary

某种情况下,需要注册多个相同类型的Bean对象;
使用情况:

  1. = Bean和primary一起使用;
    则该对象具有较高的优先级;

R

@Retention(RetentionPolicy.RUNTIME)

说明自定义注解的生命周期。
RetentionPolicy.RUNTIME = 始终不会丢弃,运行期也保留读注解。

@RestController

@controller和@ResponseBody 的结合;
前者 = 该类是一个控制器,负责接收请求、处理请求,并返回响应。
后者=将请求响应的数据以指定的格式写入到Response的body中。

@RequestMapping

  1. 将任意HTTP请求 映射到控制器方法上来。
    将请求和处理请求的控制器方法关联起来,建立映射关系。
    即可修饰类,也可以修饰⽅法,当修饰类和方法时,访问该方法的Url地址是:类 + 方法。
    在这里插入图片描述

  2. @GetMapping和@PostMapping
    @GetMapping = 用于将HTTP get请求映射到特定处理程序;
    @PostMapping = 用于将HTTP post请求映射到特定处理程序;
    @GetMapping = @RequestMapping(method = RequestMapping.GET)
    @PostMapping = @RequestMapping(method = RequestMapping.POST)

@ResponseBody

将controller的方法返回的对象,通过合适的转换器,转换为指定的格式,写入到response对象的body区(响应体中),通常用来返回JSON或XML。

@RestControllerAdvice

用于定义全局异常处理和全局数据绑定的类;
被应用于带有@Controller和@RestController注解的类上,用于统一处理这些类中抛出的异常,并对返回的数据进行统一处理。

@ResponseStatus

用法:①加在自定义异常类上;②加在目标方法上。
有三个属性:code、value、reason。
具体介绍:

加在目标方法上:
value = 设置异常的状态;
reason = 异常的描述;
加在@ExceptionHandler下方:
捕获异步请求异常 = 当方法捕获到异常后,返回HTTP响应的状态码为@ResponseStatus指定的状态码;

参考:
https://blog.csdn.net/ITWANGBOIT/article/details/103718926
不加ResponseStatus,则抛出自定义异常,以500的HTTP状态码响应到浏览器;
加ResponseStatus,抛出自定义异常的同时,以指定的HTTP状态和指定的reason响应到浏览器。

S

@Slf4j

注在类上,提供对应的Logger对象,变量名为log,用作日志输出。
可以在该类中直接使用log对象。

该注解使用将省略
private final Logger logger = LoggerFactory.getLogger(当前类名.class); 
这句代码,实现log.info()日志输出。

常用方法:

方法名含义
.error打印错误信息,详细到栈跟踪信息
.log(Level level,String msg)输出日志,参数(日志级别,日志信息)
.info日志记录方式,用于记录程序的运行状态、事件或重要信息

@Service

注解在类上,将类声明为业务逻辑组件,将其对象存入Spring容器中,表示其是一个服务层Bean。
在控制器类中,注入该组件的实例,即可调用其中的方法。

参考:
https://blog.csdn.net/juggle_gap_horse/article/details/128972813

@SpringBootApplication

组合注解,一般用于SpringBoot项目的主类上;
包含:@CompoentScan、@EnableAutoConfiguration、@Configuration组成;

@CompoentScan
指定要扫描的组件包的路径,并将其注册为Spring容器的组件;@EnableAutoConfiguration
根据应用程序的类路径和所声明的依赖来决定自动配置的内容,并将其添加到容器中;@Configuration
表示该类是配置类,声明了一个或多个bean的定义,该多个bean被注解到Spring容器,供应用程序使用。

@Setter

注在属性上,提供set方法;

T

@Target(ElementType.PARAMETER)

注解的注解,又称为元注解,用于描述注解的使用范围。
自定义注解定义及使用:

public @interface RequestJson {}
authSwap(HttpServletRequest request, HttpServletResponse response, @RequestJson BaseParams baseParams)

参数列表:

参数名含义
ElementType.PARAMETER该注解只能声明在一个方法参数前,即只能用于描述参数。
ElementType.METHOD用于描述方法

@TableName

定义:MyBatis-Plus框架中的注解,用于标识实体类对应的数据库表名。

@TableId

定义:用于在java中标识一个数据表的主键字段。
注解(数据表中的属性键)
数据类型 属性名 =》表示实体类中对应字段含义。

@TableFiled

定义:用来解决实体类的字段名与数据库中的字段名不匹配的问题。
注解(数据表中的属性键)
数据类型 属性名 =》表示实体类中对应字段含义。

V

@Value

动态读取配置文件中的某个系统属性;
三种使用方式:注入普通属性、注入配置文件、注入表达式并计算。

@Value(value = "${env}")  注入普通属性
@Value(value = "${server.port}") 注入服务器端口
参数来自于项目配置文件 = application.yml
spring项目读取配置文件的方式:①使用@Value;②SpringBoot中的@ConfigurationProperties

X

@Xxljob

概念 = 注解一个方法或类,表示是一个XXL-KOB任务执行的入口;
注解在类上,表示该类中所有的方法都可以被xxl-job调度执行;
注解在方法上,表示该方法可以被xxl-job调度执行。

SpringBoot

Spring以及Springboot是什么

Spring是为了解决企业级开发的复杂性而创建的,简化开发;
Spring简化开发的关键策略:

基于POJO的轻量级和最小侵入性编程;
通过控制反转(IOC),依赖注入(DI)和面向接口实现松耦合;
基于切面(AOP)和惯例进行声明式编程;
通过切面和模板(Template)减少样式代码;注:
普通Java对象(Plain Old Java Object

一些关键话语:

约定大于配置;
自动装载;

SpringBoot的优点:

帮助所有Spring开发者快速入门
开箱即用,提供各种默认配置来简化项目配置
内嵌容器(tomact)简化web项目
没有冗余代码生成和XML配置的要求

微服务+第一个Springboot项目

微服务:一种架构风格,将开发一个应用变成一系列小服务组合,可通过HTTP(RPC)方式互相通信。
单体应用架构,将一个应用的所有应用服务都封装在一个应用中,各个功能放在一个war包里。
微服务架构,将每个功能元素都独立出来,并将独立出来的功能元素动态组合,也就是对功能元素的复制,而不是整个应用的复制;

创建一个springboot项目
两种方式:Springboot官网版本 / IDEA自己创建(IDEA集成了这个网站) 或者 IDEA自己创建;

  1. Springboot官网版本:
    中文文档:https://springdoc.cn/spring-boot/
    官网文档:https://spring.io/projects/spring-boot#learn
    最新版本是:3.2.2
    当前创建页面只支持以下图展示内容:
    在这里插入图片描述
  2. IDEA创建springboot项目
    文件 – 新建 – 项目 – Spring Initializr
    通过该方法java版本只有17和21 两种,jdk1.8 与java17不匹配,可以和java21匹配;

项目注意事项

@SpringbootApplication
springboot中的启动类是application,其他的类都得在该启动类的同级目录下;
启动类application,程序的主入口,本身就是Spring的一个组件;
所有springboot的依赖都采用 spring-boot-starter 这个前缀;
项目打包:package

在这里插入图片描述
3. IDEA选择创建Springboot项目
创建项目遇到的问题:
java语言只有17和21版本,jdk是1.8 如何解决?
https://zhuanlan.zhihu.com/p/668876308
在新建项目的页面,修改连接;
在这里插入图片描述
application.properties配置修改

# web服务端口号修改
server.port = xxx
# banner修改
需要在线生成网站处理:
https://www.bootschool.net/ascii-art/search
在resource/banner.txt文件
将网站生成的图片放在该文件中。

在这里插入图片描述

自动配置与编写 yaml

1 自动配置

自动装配原理

集成 web开发(业务核心)

集成 数据库 Druid

分布式开发:Dubbo(RPC) + zookeeper

swagger:接口文档

任务调度

SpringSecurit:Shiro

本质上是:拦截器与过滤器就可以实现安全功能;

Linux项目部署

SpringCloud

分布式开发,两套实现:
Dubbo + zookeeper 以及 Restful + Eureka

springcloud入门

Restful 接口风格

Eureka 服务注册与发现

Ribbon 负载均衡

与Liunx中的nignx类似;

Feign 负载均衡

HyStrix 服务容灾

Zuul路由网关

SpringCloud config:git

具体实际代码学习

请求参数分析

思考1:
描述:

前端发送给某个接口发送请求后,接口的处理过程:
当Spring MVC接收到一个HTTP请求时,
它会根据@RequestMapping等注解将请求映射到相应的处理方法(即HandlerMethod),
并使用参数解析器(如HandlerMethodArgumentResolver)来解析HTTP请求中的各种数据源(如查询参数、表单数据、路径变量、请求体内容等),
并将这些数据绑定到对应方法的参数上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/448571.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

⒒电子产品拆解分析-英语四六级耳机

⒒电子产品拆解分析-英语四六级耳机 一、功能介绍二、电路分析以及器件作用1、4054锂电池充电电路2、RDA5807FP收音机电路三、其它一、功能介绍 ①可接收FM50~108广播电台频率;②关机可备份当前接收的频率和音量;③内置锂电池可充电使用;④可接多功能线到手机或电脑当头戴耳…

Redis -- list列表

只有克服了情感的波动&#xff0c;才能专心致志地追求事业的成功 目录 列表 list命令 lpush lpushx rpush rpushx lrange lpop rpop lindex linsert llen lrem ltrim 阻塞命令 小结 列表 列表相当于 数组或者顺序表。 列表类型是用来存储多个有序的字符串&…

Java项目:基于SSM框架实现的教务管理系统(ssm+B/S架构+源码+数据库+毕业论文)

一、项目简介 本项目是一套ssm813基于SSM框架实现的教务管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#x…

Redis -- hash哈希

马行软地易失蹄&#xff0c;人贪安逸易失志。 目录 关于Redis的hash hash命令 hset hget hexists hdel hkeys hvals hgetall hmget hlen hsetnx hash计数 hincrby hincrbyfloat 小结 关于Redis的hash 几乎所有的主流编程语言都提供了哈希&#xff08;hash&a…

动态微信小程序码和开发者工具解析小程序码

一、动态生成微信小程序码 1、方式一 微信官方网站&#xff0c;对已发布的小程序&#xff0c;提供了一个快捷的入口&#xff0c;输入微信小程序的page页面即可。 page页面可以通过右侧开启入口获取 也可以通过开发者工具左下角的页面地址和参数地址那里获取到 二、生成的小…

【Java程序设计】【C00224】基于Springboot+vue的前后端分离的党员信息管理系统(论文)

基于Springbootvue的前后端分离的党员信息管理系统&#xff08;论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springbootvue的前后端分离的党建信息管理系统 本系统分为用户以及管理员2个角色。 用户模块管理&#xff1a;用户登录、用户注…

追觅科技发布全折叠高速吹风机Pocket

2月2日&#xff0c;追觅科技召开2024新品发布会&#xff0c;一系列年度新品亮相。现场&#xff0c;追觅科技发布了个护重磅新品——追觅Pocket折叠高速吹风机&#xff0c;这也是行业首个全折叠高速吹风机。 创新柔性折叠技术&#xff0c;直卷吹一机全能 追觅Pocket折叠高速吹风…

运维SRE-04 磁盘管理体系

磁盘管理体系详解 磁盘管理系统概述 目标 熟练掌握常用磁盘配置(容量,转速,个数)熟练说出来或写出来: raid级别熟练掌握磁盘基础使用:拿到一块硬盘到可以向硬盘写入数据分区,格式化,挂载熟练掌握: 磁盘空间不足 no space left on device 故障,原因,排查,解决. 磁盘基础内容 …

【算法与数据结构】300、674、LeetCode最长递增子序列 最长连续递增序列

文章目录 一、300、最长递增子序列二、674、最长连续递增序列三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、300、最长递增子序列 思路分析&#xff1a; 第一步&#xff0c;动态数组的含义。 d p [ i ] dp[i] dp[i…

记录element-plus树型表格的bug

问题描述 如果数据的子节点命名时children,就没有任何问题&#xff0c;如果后端数据结构子节点是其他名字&#xff0c;比如thisChildList就有bug const tableData [{id: 1,date: 2016-05-02,name: wangxiaohu,address: No. 189, Grove St, Los Angeles,selectedAble: true,th…

应用层协议 ——— HTTP协议

应用层协议 ——— HTTP协议 HTTP简介认识URL二、登录信息三、服务器地址四、服务器端口号五、带层次的文件路径六、查询字符串七、片段标识符urlencode和urldecodeHTTP协议格式HTTP请求协议格式HTTP的方法HTTP的状态码HTTP常见的HeaderHTTPS VS HTTP对称加密 VS 非对称加密 HT…

python自动化测试框架unittest与pytest的区别

有使用过unittest单元测试框架&#xff0c;再使用pytest单元测试框架&#xff0c;就可以明显感觉到pytest比unittest真的简洁、方便很多。 unittest与pytest的区别&#xff1a; 主要从用例编写规则、用例的前置和后置、参数化、断言、用例执行、失败重运行和报告这几个方面比…