SpringBoot知识点

SpringBoot



前言

这是自己总结的学习笔记,当然官网上更官方一点。


一、Spring的发展

先来说一下Spring的发展历程吧!
一、Spring1.x 时代
在Spring1.x时代,都是通过xml文件配置bean,随着项目的不断扩大,需要将xml配置分放到不同的配置文件中,需要频繁的在java类和xml配置文件中切换。
二、Spring2.x时代
随着JDK 1.5带来的注解支持,Spring2.x可以使用注解对Bean进行申明和注入,大大的减少了xml配置文件,同时也大大简化了项目的开发。
那么,问题来了,究竟是应该使用xml还是注解呢?
最佳实践:
1、应用的基本配置用xml,比如:数据源、资源文件等;
2、业务开发用注解,比如:Service中注入bean等;
三、Spring3.x
从Spring3.x开始提供了Java配置方式,使用Java配置方式可以更好的理解你配置的Bean
四、Spring4.x
泛型限定式依赖注入,核心容器的改进, web开发增强, 集成Bean Validation 1.1(JSR-349)到SpringMVC,更好的Java泛型操作API,注解、脚本、任务、MVC等其他特性改进
五、Spring4.x到Spring5.x
Spring5.x整个框架的代码基于java8,通过使用泛型等特性提高可读性,对java8提高直接的代码支撑,运行时兼容JDK9,Java EE 7API需要Spring相关的模块支持,运行时兼容Java EE8 API

二、什么是springboot

刚了解了Spring历程,那么接下来言归正传,说一下Springboot
  1. Spring Boot作为Java编程语言的一个全新开发框架,相比于以往的一些开发框架,Spring Boot不但使用更加简单,而且功能更加丰富,性能更加稳定而健壮。
  2. Spring Boot默认集成spring5和许多第三方包(默认依赖),是在Spring框架基础上创建的一个全新框架,其设计目的是简化Spring应用的搭建和开发过程,它不但具有Spring的所有优秀特性,而且具有如下显著的特点: 为Spring开发提供更加简单的使用和快速开发的技巧。 具有开箱即用的默认配置功能,能根据项目依赖自动配置。 具有功能更加强大的服务体系,包括嵌入式服务、安全、性能指标、健康检查等。
  3. springboot的优点
    在这里插入图片描述

2.Pom文件(示例):
在这里插入图片描述
创建一个 Spring Boot 工程时,可以继承自一个 spring-boot-starter-parent ,也可以不继承自它

用parent和不用parent区别
一、用parent
  1. 定义了 Java 编译版本为 1.8 。
  2. 使用 UTF-8 格式编码。
  3. 继承自 spring-boot-dependencies,这个里边定义了依赖的版本,也正是因为继承了这个依赖,所以我们在写依赖时才不需要写版本号。
  4. 执行打包操作的配置。
  5. 自动化的资源过滤。
  6. 自动化的插件配置。
  7. 针对 application.properties 和 application.yml 的资源过滤,包括通过 profile 定义的不同环境的配置文件,例如 application-dev.properties 和 application-dev.yml。
二、不用parent区别
  1. 但是并非所有的公司都需要这个 parent ,有的时候,公司里边会有自己定义的 parent ,我们的 Spring Boot 项目要继承自公司内部的 parent
    在这里插入图片描述
SpringBoot2.X开发第⼀个JSON接⼝

1.json接口

在这里插入图片描述
2.启动类
在这里插入图片描述

三、SpringBoot注解

新版SpringBoot2.X的常⽤注解
1.@Controller 作⽤:⽤于标记这个类是⼀个控制器,返回⻚⾯的时候使⽤;如果要返回JSON,则需 要在接⼝上使⽤@ResponseBody才可以
2.@RestController 作⽤:⽤于标记这个类是⼀个控制器,返回JSON数据的时候使⽤,如果使⽤这个注解,则接⼝返回数据会被序列化为JSON
所以:@RestController = @Controller+@ResponseBody
3.@RequestMapping 作⽤:路由映射,⽤于类上做1级路径,⽤于某个⽅法上做⼦路径
4.@SpringBootApplication 作⽤: ⽤于标记是SringBoot应⽤,⾥⾯包含多个⼦注解,即
@SpringBootApplication 等价于
@Configuration+@EnableAutoConfiguration+@ComponentScan

① @Configuration: 主要标注在某个类上,⽤于spring扫描注⼊,⼀般结合@Bean使⽤
② @EnableAutoConfiguration: 启⽤Spring的⾃动加载配置,⾃动载⼊应⽤程序所需的所有Bean
③ @ComponentScan:告诉spring扫描包的范围,默认是Applocation类所在的全部⼦包,可以指定其他@ComponentScan({“jin.in.o”,“jin.in.o”})

四、入口类和@SpringBootApplication

Spring Boot的项目一般都会有*Application的入口类,入口类中会有main方法,这是一个标准的Java应用程序的入口方法。

@SpringBootApplication注解是Spring Boot的核心注解,它其实是一个组合注解:
在这里插入图片描述
该注解主要组合了以下注解:
@SpringBootConfiguration:这是Spring Boot项目的配置注解,这也是一个组合注解:
1.在Spring Boot项目中推荐使用@ SpringBootConfiguration替代@Configuration

2.@EnableAutoConfiguration:启用自动配置,该注解会使Spring Boot根据项目中依赖的jar包自动配置项目的配置项:
如:我们添加了spring-boot-starter-web的依赖,项目中也就会引入SpringMVC的依赖,Spring Boot就会自动配置tomcat和SpringMVC

五、SpringBoot2.X开发规范

1.SpringBoot⽬录⽂件结构和官⽅推荐的⽬录规范、静态资源访问
2.⽬录讲解
src/main/java:存放代码
src/main/resources
static: 存放静态⽂件,⽐如 css、js、image, (访问⽅式 http://localhost:8080/js/main.js)
templates:存放静态⻚⾯jsp,html,tpl
config:存放配置⽂件,application.properties
resources:
3.同个⽂件的加载顺序,静态资源⽂件 Spring Boot 默认会挨个从
META/resources > (默认存在的)
resources >
static >
public
⾥⾯找是否存在相应的资源,如果有则直接返回,不在默认加载的⽬录,则找不到

六、SpringBoot2.x启动类位置常⻅形式

注意:应⽤启动的位置,Application启动类位置三种形式
① 当启动类和controller在同⼀类中时,在该类上添加注解@Controller即可;
② 当启动类和controller分开时,启动类要放在根⽬录下,启动类上只需要注解
@SpringBootApplication;
③ 当启动类和controller分开时,如果启动类在⾮根⽬录下,需要在启动类中增加注解
@ComponentScan,并配置需要扫描的包名,如(basePackages = )
@ComponentScan(basePackages={"",""})(basePackages可以省略)
⼯作中⽤哪种⽐较多? 强烈推荐第⼆种⽅式,不然漏配置扫描包,项⽬庞⼤,出现问题则难排查

七、Springboot 项⽬架构搭建

1.创建项⽬
2.配置启动类
3.建⽴对应的包,先建⽴这些包,其他⽤到再补充 (如下图)
在这里插入图片描述

八、SpringBoot2.X开发HTTP接⼝请求实战

场景:⼀般的查询接⼝就是get请求
注解:@GetMapping = @RequestMapping(method = RequestMethod.GET)
⼀个顶两的注解
@GetMapping = @RequestMapping(method = RequestMethod.GET)
@PostMapping = @RequestMapping(method = RequestMethod.POST)
@PutMapping = @RequestMapping(method = RequestMethod.PUT)
注意:PutMapping和PostMapping作用等同,都是用来向服务器提交信息。如果是添加信息,倾向于用@PostMapping,如果是更新信息,倾向于用@PutMapping。两者差别不是很明显。
@DeleteMapping = @RequestMapping(method = RequestMethod.DELETE)

九、SpringBoot2.X⾥⾯定制JSON字段

JavaBean序列化为Json

性能:Jackson > FastJson > Gson > Json-lib 同个结构
Jackson、FastJson、Gson类库各有优点,各有⾃⼰的专⻓
空间换时间,时间换空间

jackson处理相关⾃动

指定字段不返回:@JsonIgnore
指定⽇期格式:@JsonFormat(pattern=“yyyy-MM-dd
hh:mm:ss”,locale=“zh”,timezone=“GMT+8”)
空字段不返回:@JsonInclude(Include.NON_NULL)
指定别名:@JsonProperty

序列化和反序列化操作

  • 序列化操作
    ObjectMapper objectMapper = new ObjectMapper();
    String jsonStr = objectMapper.writeValueAsString(list);
    System.out.println(jsonStr);
  • 反序列化操作
    List temp = objectMapper.readValue(jsonStr,List.class);

十、SpringBoot.2.X⾥⾯的配置⽂件

SpringBoot2.x常⻅的配置⽂件形式

xml、yml、properties

常⻅的配置⽂件格式

xml、properties、json、yaml

Springboot⾥⾯常⽤xx.yml

YAML(Yet Another Markup Language) 写 YAML 要⽐写 XML 快得多(⽆需关注标签或引号) 使⽤空格 Space 缩进表示分层,不同层次之间的缩进可以使⽤不同的空格数⽬
注意:key后⾯的冒号,后⾯⼀定要跟⼀个空格,
在这里插入图片描述

Springboot⾥⾯常⽤ xx.properties

在这里插入图片描述

十一、实体类配置⽂件

1、添加 Configuration 注解;
2、使⽤ @PropertySource 注解指定配置⽂件位置;
3、使⽤ @ConfifigurationProperties 注解,设置相关属性;
4、必须 通过注⼊IOC对象Resource 进来 , 才能在类中使⽤获取的配置⽂件值。
@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。
使用AnnotationConfigApplicationContext可以实现基于Java的配置类加载Spring的应用上下文。避免使用application.xml进行配置。相比XML配置,更加便捷。

十二、Springboot2.X全局异常处理

为什么要配置全局异常?

不配全局服务端报错场景 1/0、空指针等。

配置好处

统⼀的错误⻚⾯或者错误码
对⽤户更友好

Springboot2.X怎么在项⽬中配置全局异常

类添加注解
@ControllerAdvice,如果需要返回json数据,则⽅法需要加@ResponseBody
在这里插入图片描述
@RestControllerAdvice, 默认返回json数据,⽅法不需要加@ResponseBody
⽅法添加处理器 捕获全局异常,处理所有不可知的异常
@ExceptionHandler(value = Exception.class)
注解用来指明异常的处理类型
在这里插入图片描述

十三、新版Servlet3.0和SpringBoot2.X过滤器-拦截器实战

SpringBoot2.X过滤器讲解

什么是过滤器

filter是对客户端访问资源的过滤,符合条件放行,不符合条件不放行,并且可以对目 标资源访问前后进行逻辑处理

SpringBoot2.X⾥⾯的过滤器

在这里插入图片描述

那么多过滤器,哪个优先级⾼呢?

在这里插入图片描述
从低到高的顺序,即最低值具有高优先级
在这里插入图片描述

⾃定义Filter,避免和默认的Filter优先级⼀样,不然会冲突(自定义优先级1-100)

注册Filter配置两种⽅式

bean FilterRegistrationBean
Servlet3.0 webFileter

使⽤新版Servlet3.0的注解开发⾃定义Filter

在这里插入图片描述

十四、Servlet3.0的注解原⽣Servlet实战

在这里插入图片描述
Servlet是运行在服务器的一个java程序。tomcat 是Web应用服务器,是一个Servlet/JSP容器. Tomcat 作为Servlet容器,负责处理客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户。

创建servlet步骤:
a)创建类继承HttpServlet
b)重写方法doGet doPost
有几种方式创建Servlet
extends HttpServlet implements Servlet extends GenericeServlet

servlet中三个描述生命周期的方法
init service destroy

servlet生命周期
第一次访问servlet,会实例化servlet,调用init方法进行初始化,开启线程调用service处理请求,以后每一次请求都会开启一个新的线程来调用service方法,关闭服务器时,会调用destroy销毁servlet实例

十五、新版本springboot2.x的starter和常见模板的引擎

JSP

Java Server Pages 动态网页技术,由应用服务器中的JSP引擎来编译和执行,再将生成的整个页面返回给客户端,可以写java代码,持表达式语言(el,jst1)内建函数,JSP->Servlet(占用JVM内存)

Freemarker

FreeMarker Template Language (FTL)文件一般保存为xxx.ftl
严格依赖Mvc模式,不依赖Servlet容 器(不 占用JVM内存)
内建函数
轻量级的模板引擎(复杂逻辑业务的不推荐,解析DOM或者XML会占用多的内存)
可以直接在浏览器中打开且正确显示模板页面,直接是html结尾,直接编辑
/user/userinfo. Html

ModelMap和ModelAndView

  • ModelMap
    该对象主要用于传递控制方法处理数据到结果页面,也就是说我们把结果页面上需要的数据放到ModelMap对象中即可,他的作用类似于request对象的setAttribute方法的作用:用来在一个请 求过程中传递处理的数据。

  • ModelAndView
    作用一:添加模型数据用add0bject;
    作用二:设置视图setVi ewName;

十六、SpringBoot整合模板引擎thymeleaf实战

官方链接
配置内容
#开发时关闭缓存,不然没法看到实时页面
spring.thymeleaf.cache=false
spring.thymeleaf.mode=HTML5
#前缀
spring.thymeleaf.prefix=classpath:/templates/
#编码
spring.thymeleaf.encoding=UTF-8
#名称的后缀
spring.thymeleaf.suffix=.html
在这里插入图片描述
th:each属性用于迭代循环,语法: th:each=“obj,iterStat:${objList}”
迭代对象可以是Java.util.List,java.util.Map,数组等;
iterStat称作状态变量,属性有:
index:当前迭代对象的index(从0开始计算)
当前迭代对象的index(从1开始计算)
size:被迭代对象的大小
current:当前迭代变量
even/odd:布尔值,当前循环是否是偶数/奇数(从0开始计算)
first:布尔值,当前循环是否是第-一个
last:布尔值,当前循环是否是最后-一个
th:if属性不仅只以布尔值作为判断条件,它将按照如下规则判定指定的表达式结果为true:
1)如果表达式结果为布尔值,则为true 或者false
2)如果表达式的值为null, th:if 将判定此表达式为false
3)如果值是数字,为0时,判断为false; 不为零时,判定为true
4)如果value是. String,值为“false”、 “off”、 “no” 时,判定为false, 否则判断为true,字符串为空时,也判断为true .
5)如果值不是布尔值,数字,字符或字符串的其它对象,只要不为null, 则判断为true

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值