使用控制器通知- SpringBoot(12)
控制器通知 在编写代码时,需要对异常进行处理。进行异常处理的普通的代码是try-catch结构。但在开发业务时,只想关注业务正常的代码,对于catch语句中的捕获异常,希望交给异常捕获来处理,不单独在每个方法中编写。这样不仅可以减少冗余代码,还可以减少因忘记写catch而岀现错误的概率。Spring正好提供了一个非常方便的异常处理方案——控制器通知@ControllerAdvice或 @RestcontrollerAdvice),它将所有控制器作为一个切面,利用切面技术来实现。通过基于@ControllerAdvice或@RestControllerAdvice的注解可以对异常进行全局统一处理,默认对所有的Controller有效。如果要限定生效范围,则可以使用ContrallerAdvice支持的限定范围方式。 按注解:@ControllerAdvice(annotations = RestController.class) 按包名:@ControllerAdvice(“org.example.controller”) 按类型:@ControllerAdvice(as ...
异常处理- SpringBoot(11)
1.异常处理1.1.异常处理的必要性 异常处理用于解决一些程序无法掌控,但又必须面对的情况。例如,程序需要读取文件、连接网络、使用数据库等,但可能文件不存在、网络不畅通、数据库无效等情况。为了程序能继续运行, 此时就需要把这些情况进行异常处理。异常处理的方法通常有以下几种: 将异常通知给开发人员、运维人员或用户。 使因为异常中断的程序以适当的方式继续运行,或者退岀。 保存用户的当前操作,或者进行数据回滚。 释放资源。 1.2.异常的分类 Error:代表编译和系统的错误,不允许捕获。 Exception:标准Java库的方法所激发的异常,包含运行异常Runtime_Exception和非运行异常Non_RuntimeException的子类。 Runtime Exception:运行时异常。 Non_RuntimeException:非运行时可检测的异常,Java编译器利用分析方法或构造方法中可能产生的结果来检测程序中是否含有检测异常的处理程序,每个可能的可检测异常、方法或构造方法的throws子句必须列出该异常对应的类。 Throw:用户自定义异常。 1.3.如何处理异常(1 ...
元注解与自定义注解- SpringBoot(10)
1.元注解元注解就是定义注解的注解,是Java提供的用于定义注解的基本注解 1.@Target 该注解的作用是告诉Java将自定义的注解放在什么地方,比如类、方法、构造器、变量上等。 它的值是一个枚举类型,有如下属性值。 ElementType.CONSTRUCTOR:用于描述构造器。 ElementType.FIELD:用于描述成员变量、对象、属性(包括enum实例)。 ElementType.LOCAL_VARIABLE:用于描述局部变量。 ElementType.METHOD:用于描述方法。 ElementType.PACKAGE:用于描述包。 ElementType.PARAMETER:用于描述参数。 ElementType.TYPE;用于描述类、接口(包括注解类型)或enum声明。 2.@Retention该注解用于说明自定义注解的生命周期,在注解中有三个生命周期. RetentionPolicy.RUNTIME:始终不会丢弃,运行期也保留该注解,可以使用反射机制读取该注解的信息。自定义的注解通常使用这种方式。 RetentionPolicy.CLASS:类加载时丢弃 ...
自定义Starter- SpringBoot(9)
自定义Starter如果Spring Boot自带的入口类不能满足要求,则可以自定义Starter。自定义Starter的步骤 如下。 1.引入必要的依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope></dependency><dependency> <groupId>org.projectlombok</groupId> <artifactId ...
过滤器与监听器- SpringBoot(8)
1.过滤器1.为什么要使用过滤器 在Web开发中,常常会有这样的需求:在所有接口中去除用户输入的非法字符,以防止引起业务异常。要实现这个功能,可以有很多方法,如: 在前端参数传入时进行校验,先过滤掉非法字符,然后,返回用户界面提示用户重新输入。 后端接收前端没有过滤的数据,然后过滤非法字符。 利用Filter处理顼目中所有非法字符。 很明显,前两种实现方法会存在重复代码,因为每个前端页面或后端都需要处理,这样会导致 代码极难维护。如果用过滤器来实现,则只需要用过滤器利所有接口进行过滤处理。这样非常方便, 同时不会岀现冗余代码。 2.使用Filter的步骤(1)新建类,实现Filter抽象类。 (2)重写 init、doFilter、destroy 方法。 (3)在 Spring Boot 入口中添加注解@ServletComponentScan,以注册 Filter 详细步骤如下: (1)编写过滤器类。package com.itheima.filter;import org.springframework.core.annotation.Order;import ja ...
认识Ioc容器和Servlet容器-SpringBoot(7)
认识Ioc容器和Servlet容器1.介绍loC容器loC (Inversion of Control)容器,是面向对象编程中的一种设计原则,意为控制反转(也被 称为’控制反向”或”控制倒置”)。它将程序中创建对象的控制权交给Spring框架来管理,以便降低计算机代码之间的耦合度。 控制反转的实质是获得依赖对象的过程被反转了。这个过程由自身管理变为由loC容器主动注入。这正是loC实现的方式之一:依赖注入(dependency injection, DI),由loC容器在运行期间动态地将某种依赖关系注入对象之中。 在传统编程方式中,要实现某种功能一般都需要几个对象相互作用。在主对象中要保存其他类型对象的引用,以便在主对象中实例化对象,然后通过调用这些引用的方法来完成任务,其运行方式如图 而IoC容器是在主对象中设置Setter方法,通过调用Setter方法或构造方法传入所需引用(即 依赖注入),如图所示。 要使用某个对象,只需要从loC容器中获取需要使用的对象,不需要关心对象的创建过程,即 把创建对象的控制权反转给了 Spring框架。 2.loC的实现方法IoC的实现方法主要有两 ...
面向切面编程-SpringBoot(6)
面向切面编程1.什么是AOPAOP (Aspect Oriented Program,面向切面编程)把业务功能分为核心、非核心两部分。 核心业务功能:用户登录、增加数据、删除数据。 非核心业务功能:性能统计、日志、事务管理。 在Spring的面向切面编程(AOP)思想里,非核心业务功能被定义为切面。核心业务功能和切面功能先被分别进行独立开发,然后把切面功能和核心业务功能“编织”在一起,这就是AOP AOP将那 些与业务无关,却为业务模块所共同调用的逻辑封装起来,以便减少系统的重复代码,降低模块间的耦合度,利于未来的拓展和维护。这正是AOP的目的,它是Spring最为重要的功能之一,被广泛使用。 2.AOP中的概念 切入点(pointcut):在哪些类、哪些方法上切入 通知(advice):在方法前、方法后、方法前后做什么 切面(aspect):切面=切入点+通知。即在什么时机、什么地方、做什么 织入(weaving):把切面加入对象,并创建出代理对象的过程 环绕通知:AOP中最强大、灵活的通知,它集成了前置和后置通知,保留了连接点原有的方法 实例:用AOP方式管理日 ...
响应式编程WebFlux-SpringBoot(5)
1.响应式编程 WebFlux是从Spring Framework 5.0开始引入响应式Web框架的。与Spring MVC不同, WebFlux不需要Servlet API,在完全异步且无阻塞,并通过Reactor项目实现Reactive Streams 规范。 WebFlux可以在资源有限的情况下提高系统的吞吐量和伸缩性(不是提高性能)。这意味着, 在资源相同的情况下,WebFlux可以处理更多的请求(不是业务)。 WebFlux除支持RESTful Web服务外,还可以用于提供动态HTML内容。 MVC: MVC的工作流程是:主线程接收到请求(request)-准备数据-返回数据。整个过程是单线程咀塞的,用户会感觉等待时间长是因为,在结果处理好之后才返回数据给浏 览器。因此,如果请求很多,则吞吐量就上不去。 WebFlux: WebFlux的工作流程是:主线程接收到请求—立刻返回数据与函数的组合(Mon或Flux, 不是结果),开启一个新Work线程去做实际的数据准备工作,进行真正的业务操作,Work 线程完成工作,返给用户真实数据(结果)。 这种 ...
视图技术Thymeleaf-SpringBoot(4)
1.什么是Thymeleaf Spring Boot 主要支持Thymeleaf、Freenrtarker、Mustache、Groovy Templates 等模板引擎。 Thymeleaf语法并不会破坏文档的结构,所以Thymeleaf模板依然是有效的HTML文档。模 板还可以被用作工作原型,Thymeleaf会在运行期内替换掉静态值。它的模板文件能直接在浏览器 中打开并正确显示页面,而不需要启动整个Web应用程序。 1.1 为什么需要模板引擎 Thymeleaf解决了前端开发人员要和后端开发人员配置一样环境的尴尬和低效。它通过属性进 行模板渲染,不需要引入不能被浏览器识别的新的标签。页面直接作为HTML文件,用浏览器打开页面即可看到最终的效果,可以降低前后端人员的沟通成本。 1.2 使用Thymeleaf要使用Thymeleaf,首先需要引入依赖。直接在pom.xml文件中加入以下依赖即可。 <dependency> <groupId>org.springframework.boot</groupId> <artifa ...
应用程序分层开发模式—MVC-SpringBoot(3)
1.MVC设计模式Spring Boot开发Web应用程序主要使用MVC模式。MVC是Model (模型)、View(视图)、 Controller (控制器)的简写。 Model:是Java的实体Bean,代表存取数据的对象或POJO (Plain Ordinary Java Objects,简单的Java对象),也可以带有逻辑。其作用是在内存中暂时存储数据,并在 数据变化时更新控制器(如果要持久化,则需要把它写入数据库或者磁盘文中)。 View:主要用来解析、处理、显示内容,并进行模板的渲染。 Controller:主要用来处理视图中的响应。它决定如何调用Model (模型)的实体Bean、 如何调用业务层的数据增加、删除、修改和查询等业务操作,以及如何将结果返给视图进行 渲染。建议在控制器中尽量不放业务逻辑代码。 这样分层的好处是:将应用程序的用户界面和业务逻辑分离,度得代码具备良好的可扩展性、 可复用性、可维护性和灵活性。 如果不想使用MVC开发模式也是可以的,MVC只是一个非常合理的规范。MVC的关系如图所示 在整个Spring MVC框架中,DispatcherSer ...
SpringBoot在方法中使用参数-SpringBoot(2)
1.获取路径中的值@RequestMapping(value = "/put/{name}")public String put(@PathVariable String name){ return name;} 在访问 ‘’https://localhost:8080/put/拉嘎节目" 时,程序会自动将 URL 中的模板变量 {name} 绑定到通过@PathVariable 注解的同名参数上,即”程序获取路径中的值” 2.获取路径中的参数对于路径中的参数获取 ,可以写入方法的形参中。下面代码是获取参数 username 的值。 @RequestMapping(value = "/put")public String put(String name){ return name;} 3.通过 Bean 接收 https 提交的对象可以通过 Bean获取 https 提交的对象,如以下代码 @RequestMapping(value = "/put& ...
https中媒体类型-SpringBoot(1)
1.常见媒体类型在https协议中,使用,用 Content- Type 来表示具体请求中的媒体类型信息。 PC 端网页常用的是 “text/html” 格式,手机 APP 常用的是 JSON 格式。 (1)常见的媒体格式如下• text/html : HTML 格式。• text/plain 纯文本格式。• text/xml: XML 格式。• image/gif: GIF 图片格式。• image/jpeg : JPG 图片格式• image/png: PNG 图片格式 ( 2 )以 application开头的媒体格式如下。• application/xhtml+xml: XHTML + XML 格式。• application/xm : XML 数据格式。• application/atom+xml: Atom XML 聚合格式。• application/json: JSON 数据格式• application/pdf: PDF 格式• applicatio ...













