SpringBoot
文章目录
- SpringBoot
- 前言
- 一、Spring的发展
- 二、什么是==springboot==
- 三、SpringBoot注解
- 四、入口类和@SpringBootApplication
- 五、SpringBoot2.X开发规范
- 六、SpringBoot2.x启动类位置常⻅形式
- 七、Springboot 项⽬架构搭建
- 八、SpringBoot2.X开发HTTP接⼝请求实战
- 九、SpringBoot2.X⾥⾯定制JSON字段
- 十、SpringBoot.2.X⾥⾯的配置⽂件
- 十一、实体类配置⽂件
- 十二、Springboot2.X全局异常处理
- 十三、新版Servlet3.0和SpringBoot2.X过滤器-拦截器实战
- 十四、Servlet3.0的注解原⽣Servlet实战
- 十五、新版本springboot2.x的starter和常见模板的引擎
- 十六、SpringBoot整合模板引擎thymeleaf实战
前言
这是自己总结的学习笔记,当然官网上更官方一点。
一、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- Spring Boot作为Java编程语言的一个全新开发框架,相比于以往的一些开发框架,Spring Boot不但使用更加简单,而且功能更加丰富,性能更加稳定而健壮。
- Spring Boot默认集成spring5和许多第三方包(默认依赖),是在Spring框架基础上创建的一个全新框架,其设计目的是简化Spring应用的搭建和开发过程,它不但具有Spring的所有优秀特性,而且具有如下显著的特点: 为Spring开发提供更加简单的使用和快速开发的技巧。 具有开箱即用的默认配置功能,能根据项目依赖自动配置。 具有功能更加强大的服务体系,包括嵌入式服务、安全、性能指标、健康检查等。
- springboot的优点
2.Pom文件(示例):
创建一个 Spring Boot 工程时,可以继承自一个 spring-boot-starter-parent ,也可以不继承自它
用parent和不用parent区别
一、用parent
- 定义了 Java 编译版本为 1.8 。
- 使用 UTF-8 格式编码。
- 继承自 spring-boot-dependencies,这个里边定义了依赖的版本,也正是因为继承了这个依赖,所以我们在写依赖时才不需要写版本号。
- 执行打包操作的配置。
- 自动化的资源过滤。
- 自动化的插件配置。
- 针对 application.properties 和 application.yml 的资源过滤,包括通过 profile 定义的不同环境的配置文件,例如 application-dev.properties 和 application-dev.yml。
二、不用parent区别
- 但是并非所有的公司都需要这个 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