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的配置,完全去掉了自动配置
大概就是这些,博主也在研究中