springBoot第四天(异常处理及自动配置等)


spring配置

在传统的SSM框架集成中,需要编写大量的XML配置文件,比如集成Mybatis时,需要编写mybatis_config.xml文件,在集成springmvc时,需要编写springmvc.xml文件,这些配置文件十分繁琐,还很容易出现错误,导致开发效率低。而Spring Boot采用约定大于配置的思想,将大量的spring配置文件集成到Spring Boot的内部,帮助开发人员自动配置各类XML文件,极大的简化了开发过程

一、springboot如何开启自动配置?

二、使用步骤

1、当SpringBoot应用启动的时候,就从主方法里面进行启动的。

代码如下(示例):

@SpringBootApplication
public class SpringBoot02ConfigAutoconfigApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBoot02ConfigAutoconfigApplication.class, args);
    }
}

它主要加载了@SpringBootApplication注解主配置类,这个@SpringBootApplication注解主配置类里边最主要的功能就是SpringBoot开启了一个@EnableAutoConfiguration注解的自动配置功能。

2.@EnableAutoConfiguration作用:

它主要利用了一个

EnableAutoConfigurationImportSelector选择器给Spring容器中来导入一些组件。
代码如下(示例):

@Import(EnableAutoConfigurationImportSelector.class)
public @interface EnableAutoConfigurati

底层原理还在研究中

3.@SpringBootConfiguration:

该注解上有一个 @Configuration注解,表示这个spring boot启动类是一个配置类,最终要被注入到spring容器中。

在这里插入图片描述

二、总结springboot如何处理异常的

当后台程序中抛出异常时,springboot默认将错误交由/error地址处理,处理方式可到org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController中查看。 通过现象可以发现springboot的处理方式很简单,只是单纯的跳转到一个错误界面,如图所示
在这里插入图片描述
1.我们可以自定义错误页面
1.在templates目录下面,咱们创建一个error.html页面。只要后台资源发生了异常(不管是什么异常),都统统交给error页面来处理
2.咱们有模板引擎的情况下 直接将错误页面命名为
错误状态码.html放在模板引擎文件夹里面的error文件夹下,发生这个状态就会到对应的页面下
在这里插入图片描述
2.@ExceptionHandle 注解处理异常
在这里插入图片描述

package com.yousian.exception;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;

@ControllerAdvice //标识当前类是一个全局异常处理类
public class GlobalException {

    // 处理算术异常
    @ExceptionHandler(value = {java.lang.ArithmeticException.class})
    public ModelAndView handleArithmeticException(Exception e){
        ModelAndView mv = new ModelAndView();
        mv.addObject("error",e.toString());//向页面展示错误信息
        mv.setViewName("error1");
        return mv;
    }

    //处理空指针异常
    @ExceptionHandler(value = {java.lang.NullPointerException.class})
    public ModelAndView handleNullPointerException(Exception e){
        ModelAndView mv = new ModelAndView();
        mv.addObject("error",e.toString());//向页面展示错误信息
        mv.setViewName("error1");
        return mv;
    }

    //处理数组下标越界异常
    @ExceptionHandler(value = {java.lang.ArrayIndexOutOfBoundsException.class})
    public ModelAndView handleArrayIndexOutOfBoundsException(Exception e){
        ModelAndView mv = new ModelAndView();
        mv.addObject("error",e.toString());//向页面展示错误信息
        mv.setViewName("error1");
        return mv;
    }
}

不同异常使用不同注解实现,可以自定义异常信息存储的key,自定义跳转视图的名称,这种方式比较麻烦,没有第一种粗暴简单
它支持一个controller 不支持跨controller
需要编写大量的异常处理方法,不能跨controller,如果两个controller中出现同样的异常,需要重新编写异常处理的方法

3.@ControllerAdvice+@ExceptionHandler 注解处理异常(全局处理异常类)
1.编写异常处理类

package com.yousian.exception;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;

@ControllerAdvice //标识当前类是一个全局异常处理类
public class GlobalException {

    // 处理算术异常
    @ExceptionHandler(value = {java.lang.ArithmeticException.class})
    public ModelAndView handleArithmeticException(Exception e){
        ModelAndView mv = new ModelAndView();
        mv.addObject("error",e.toString());//向页面展示错误信息
        mv.setViewName("error1");
        return mv;
    }

    //处理空指针异常
    @ExceptionHandler(value = {java.lang.NullPointerException.class})
    public ModelAndView handleNullPointerException(Exception e){
        ModelAndView mv = new ModelAndView();
        mv.addObject("error",e.toString());//向页面展示错误信息
        mv.setViewName("error1");
        return mv;
    }

    //处理数组下标越界异常
    @ExceptionHandler(value = {java.lang.ArrayIndexOutOfBoundsException.class})
    public ModelAndView handleArrayIndexOutOfBoundsException(Exception e){
        ModelAndView mv = new ModelAndView();
        mv.addObject("error",e.toString());//向页面展示错误信息
        mv.setViewName("error1");
        return mv;
    }
}

4.配置 SimpleMappingExceptionResolver 处理异常

他也是个全局异常处理器
但是他不会显示具体的异常信息
将类注入到spring容器中
在这里插入图片描述

@Configuration
public class GlobalExceptionHandler {

    @Bean
    public SimpleMappingExceptionResolver getExceptionResolver(){
        SimpleMappingExceptionResolver resolver = new SimpleMappingExceptionResolver();
        Properties properties = new Properties();
//        *//**
//         * 参数1:处理的具体的异常的类型
//         * 参数2:处理异常需要跳转到的视图
//         *//*
        properties.put("java.lang.NullPointerException","error3");
        properties.put("java.lang.ArithmeticException","error3");
        properties.put("java.lang.ArrayIndexOutOfBoundsException","error3");
        resolver.setExceptionMappings(properties);
        return resolver;
    }
}

5.自定义 HandlerExceptionResolver 类处理异常

  • 通过实现 HandlerExceptionResolver 接口做全局异常处理
    在这里插入图片描述

三.在springboot中,如何使用拦截器?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四.在springboot中,如何扩展springmvc的功能

//参照spring boot官方文档,编写自己的config类实现WebMvcConfigurer
If you want to keep Spring Boot MVC features, and you just want to add additional MVC configuration (interceptors, formatters, view controllers etc.) you can add your own @Configuration class of type WebMvcConfigurer, but without @EnableWebMvc. If you wish to provide custom instances of RequestMappingHandlerMapping, RequestMappingHandlerAdapter or ExceptionHandlerExceptionResolver you can declare a WebMvcRegistrationsAdapter instance providing such components.If you want to take complete control of Spring MVC, you can add your own @Configuration annotated with @EnableWebMvc.
//扩展springMVC的功能,既保留了所有的自动配置,也能用扩展配置
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        //浏览器发送/lqh  请求会来到success
        registry.addViewController("/ljh").setViewName("success");
    }
}

@EnableWebMvc
全面接管springmvc,相当于之前写的springmvc的配置,完全去掉了自动配置

大概就是这些,博主也在研究中
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目详细功能参考项目演示内容即可项目优势:1、项目从零开始到完结 附带视频,源码以及相关辅助资料,适合学习使用,项目也可拿来即用。2、几乎全手写代码,功能流程详细 跟着可以独立完成,附带详细代码相关常见bug 和 调试解决方案,让大家学会跟踪快速解决问题。3、系统后端使用LayUI技术,对页面不精通的小伙伴也可以快速完成精美页面的设计及应用,支持统一后台管理,也可拿来做其他项目通用后台4、针对layui 相关技术点薄弱的学员提供相关技术点学习,让快速上手完成项目研发5、选材来自生活,项目真实感强,可用学习使用和就业面试使用,适合作为面试中提高实际项目经验...6、该项目前后端分离,满足前沿技术点..项目技术栈:- 数据库:MySQL8.0- 后端技术:SpringBoot,MyBatisPlus,JWT 等- 日志技术:Log4j- 数据库连接池:druid- 前端技术:LayUI, axios,Echarts,Ztree 等- Web容器:Apache Tomcat 9- 项目管理工具:Maven3.6- 思维导图设计工具:XMIND 8- 开发工具: IDEA2020, WebStorm2020- 数据库设计软件:Power Designer16.5特别提示:1、涉及相关技术点学习,更多侧重大学生或无项目经验以及项目经验较少的学员入门到项目完结项目实战2、项目中功能处理大多提供多种解决方式,如跨域访问,更多让大家了解解决方式的同时学会技术点应用3、加入bug的调试以及代码跟踪处理,更好的让学员更多学会如何解决问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值