Springboot-SpringCloud学习

文章目录

web项目开发历史

servlet+tomcat

struts

ssm架构

java 复制代码
Spring+SpringMVC+MyBatis
打包上线采用war包,并在tomcat上运行;

SpringBoot架构

java 复制代码
打包上线采用jar包,且已内嵌tomcat服务;

tomcat

java 复制代码
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方法,就可以实现对属性的设置。
java 复制代码
public class 当前类{
@Autowired 
private 接口 对象名;
}
// 表示将对象名 引入 当前类;
本质采用的是java的反射机制实现,将成员对象注入到具体对象。

@AllargConstructor

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

@Around

环绕通知,可以说是使用最频繁的方式,会将整个方法(此方法)包围起来。

参数execution=设置此方法的调用情况。

java 复制代码
execution(<修饰符模式>?<返回类型模式><方法名模式>(<参数模式>)<异常模式>?)
除了返回类型模式,方法名模式和参数模式外,其余都是可选填项。

修饰符模式 = 表示哪类型方法(publc、private、protected等),不写就是所有方法;
返回类型模式 = 表示返回值的类型;
包名 = 具体的包名

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

java 复制代码
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的时候才能匹配,主要是用来做自动配置的,当程序没有配置指定的类的时候,就会使用默认配置;

java 复制代码
@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接口。

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

@Inherited

J

K

L

@Log4j

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

M

@MapperScan

指定包下面的所有接口,在编译之后生成相应的实现类。

该注解可以告诉MyBatis框架在哪里扫描Mapper接口,并将其注册为一个Spring的Bean,使得Mapper接口可以被自动注入到其他组件中,便于省略手动配置Mapper接口实现类的步骤。

案例:

java 复制代码
@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。

具体介绍:

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

参考:

https://blog.csdn.net/ITWANGBOIT/article/details/103718926

不加ResponseStatus,则抛出自定义异常,以500的HTTP状态码响应到浏览器;

加ResponseStatus,抛出自定义异常的同时,以指定的HTTP状态和指定的reason响应到浏览器。

S

@Slf4j

注在类上,提供对应的Logger对象,变量名为log,用作日志输出。

可以在该类中直接使用log对象。

java 复制代码
该注解使用将省略
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组成;

java 复制代码
@CompoentScan
指定要扫描的组件包的路径,并将其注册为Spring容器的组件;

@EnableAutoConfiguration
根据应用程序的类路径和所声明的依赖来决定自动配置的内容,并将其添加到容器中;

@Configuration
表示该类是配置类,声明了一个或多个bean的定义,该多个bean被注解到Spring容器,供应用程序使用。

@Setter

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

T

@Target(ElementType.PARAMETER)

注解的注解,又称为元注解,用于描述注解的使用范围。

自定义注解定义及使用:

java 复制代码
public @interface RequestJson {}
authSwap(HttpServletRequest request, HttpServletResponse response, @RequestJson BaseParams baseParams)

参数列表:

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

@TableName

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

@TableId

定义:用于在java中标识一个数据表的主键字段。

注解(数据表中的属性键)

数据类型 属性名 =》表示实体类中对应字段含义。

@TableFiled

定义:用来解决实体类的字段名与数据库中的字段名不匹配的问题。

注解(数据表中的属性键)

数据类型 属性名 =》表示实体类中对应字段含义。

V

@Value

动态读取配置文件中的某个系统属性;

三种使用方式:注入普通属性、注入配置文件、注入表达式并计算。

java 复制代码
@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简化开发的关键策略:

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

注:
普通Java对象(Plain Old Java Object)

一些关键话语:

java 复制代码
约定大于配置;
自动装载;

SpringBoot的优点:

java 复制代码
帮助所有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匹配;

项目注意事项

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

创建项目遇到的问题:

java语言只有17和21版本,jdk是1.8 如何解决?

https://zhuanlan.zhihu.com/p/668876308

在新建项目的页面,修改连接;

application.properties配置修改

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

配置如何编写 yaml

自动装配原理

集成 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

相关推荐
NiNg_1_2341 小时前
SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
java·spring boot·后端
种树人202408191 小时前
如何在 Spring Boot 中启用定时任务
spring boot
苹果醋34 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
Wx-bishekaifayuan4 小时前
django电商易购系统-计算机设计毕业源码61059
java·spring boot·spring·spring cloud·django·sqlite·guava
customer084 小时前
【开源免费】基于SpringBoot+Vue.JS周边产品销售网站(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·java-ee·开源
小白冲鸭5 小时前
【报错解决】使用@SpringJunitConfig时报空指针异常
spring·java后端开发
Yaml45 小时前
智能化健身房管理:Spring Boot与Vue的创新解决方案
前端·spring boot·后端·mysql·vue·健身房管理
LuckyLay6 小时前
Spring学习笔记_27——@EnableLoadTimeWeaving
java·spring boot·spring
Stringzhua6 小时前
【SpringCloud】Kafka消息中间件
spring·spring cloud·kafka
佳佳_7 小时前
Spring Boot 应用启动时打印配置类信息
spring boot·后端