文章目录
- Springboot注解
- SpringBoot
-
- Spring以及Springboot是什么
- 微服务+第一个Springboot项目
- [配置如何编写 yaml](#配置如何编写 yaml)
- 自动装配原理
- [集成 web开发(业务核心)](#集成 web开发(业务核心))
- [集成 数据库 Druid](#集成 数据库 Druid)
- [分布式开发:Dubbo(RPC) + zookeeper](#分布式开发:Dubbo(RPC) + zookeeper)
- swagger:接口文档
- 任务调度
- SpringSecurit:Shiro
- Linux项目部署
- SpringCloud
-
- springcloud入门
- [Restful 接口风格](#Restful 接口风格)
- [Eureka 服务注册与发现](#Eureka 服务注册与发现)
- [Ribbon 负载均衡](#Ribbon 负载均衡)
- [Feign 负载均衡](#Feign 负载均衡)
- [HyStrix 服务容灾](#HyStrix 服务容灾)
- Zuul路由网关
- [SpringCloud config:git](#SpringCloud config:git)
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 自动装配的工作。
- 注解修饰成员属性,则无需使用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
- 使用前提:
在项目依赖中引入lombok,其是一个工具类库,以简化代码,提高开发效率; - 含义
修饰类,提供类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对象;
使用情况:
- = Bean和primary一起使用;
则该对象具有较高的优先级;
R
@Retention(RetentionPolicy.RUNTIME)
说明自定义注解的生命周期。
RetentionPolicy.RUNTIME = 始终不会丢弃,运行期也保留读注解。
@RestController
@controller和@ResponseBody 的结合;
前者 = 该类是一个控制器,负责接收请求、处理请求,并返回响应。
后者=将请求响应的数据以指定的格式写入到Response的body中。
@RequestMapping
-
将任意HTTP请求 映射到控制器方法上来。
将请求和处理请求的控制器方法关联起来,建立映射关系。
即可修饰类,也可以修饰⽅法,当修饰类和方法时,访问该方法的Url地址是:类 + 方法。
-
@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自己创建;
- Springboot官网版本:
中文文档:https://springdoc.cn/spring-boot/
官网文档:https://spring.io/projects/spring-boot#learn
最新版本是:3.2.2
当前创建页面只支持以下图展示内容:
- IDEA创建springboot项目
文件 -- 新建 -- 项目 -- Spring Initializr
通过该方法java版本只有17和21 两种,jdk1.8 与java17不匹配,可以和java21匹配;
项目注意事项
java
@SpringbootApplication
springboot中的启动类是application,其他的类都得在该启动类的同级目录下;
启动类application,程序的主入口,本身就是Spring的一个组件;
所有springboot的依赖都采用 spring-boot-starter 这个前缀;
项目打包:package;
- 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类似;