【框架】SpringBoot

目录

  • 一、为什么要有 SpringBoot?
  • 二、Spring Boot 的主要优点
  • 三、什么是 Spring Boot Starters?
  • 四、@SpringBootApplication 注解
  • 五、Spring Boot 的自动配置是如何实现的?
  • 六、开发 RESTful Web 服务常用的注解有哪些?
  • 七、Spirng Boot 常用的两种配置文件
  • 八、Spring Boot 加载配置文件的优先级
  • 如何使用Spring Boot 实现全局异常处理?
    • 自动装配

一、为什么要有 SpringBoot?

在spring中,如果我们需要引入第三方依赖,需要手动配置,非常麻烦。但是在Spring Boot 中,直接引入一个 starter 即可

​ Spring Boot 就是一个快速创建单个的、生产级别的基于Spring 的应用。而且是尽量使用少的依赖和少的配置完成。

​ 从本质上来说,Spring Boot就是Spring,它做了哪些没有它你也会去做的Spring的配置

二、Spring Boot 的主要优点

  • 良好的基因

    因为SpringBoot是伴随着Spring 4.0而生的,boot是引导的意思,也就是它的作用其实就是在于帮助开发者快速的搭建Spring框架,因此SpringBoot继承了Spring优秀的基因,在Spring中开发更为方便快捷。

  • 简化依赖

    比如我们要创建一个 web 项目,使用 Spring 的朋友都知道,在使用 Spring 的时候,需要在 pom 文件中添加多个依赖,而 Spring Boot 则会帮助开发着快速启动一个 web 容器,在 Spring Boot 中,我们只需要在 pom 文件中添加如下一个 starter-web 依赖即可。

  • 简化配置

    Spring 虽然使Java EE轻量级框架,但由于其繁琐的配置,一度被人认为是“配置地狱”。各种XML、Annotation配置会让人眼花缭乱,而且配置多的话,如果出错了也很难找出原因。Spring Boot更多的是采用 Java Config 的方式,对 Spring 进行配置。

    部署配置方面,原来 Spring 有多个 xml 和 properties配置,在 Spring Boot 中只需要个 application.yml即可。

  • 简化部署

    在使用 Spring 时,项目部署时需要我们在服务器上部署 tomcat,然后把项目打成 war 包扔到 tomcat里,在使用 Spring Boot 后,我们不需要在服务器上去部署 tomcat,因为 Spring Boot 内嵌了 tomcat,我们只需要将项目打成 jar 包,使用 java -jar xxx.jar一键式启动项目。

    另外,也降低对运行环境的基本要求,环境变量中有JDK即可

  • 简化监控

    我们可以引入 spring-boot-start-actuator 依赖,直接使用 REST 方式来获取进程的运行期性能参数,从而达到监控的目的,比较方便。但是 Spring Boot 只是个微框架,没有提供相应的服务发现与注册的配套功能,没有外围监控集成方案,没有外围安全管理方案,所以在微服务架构中,还需要 Spring Cloud 来配合一起使用。

三、什么是 Spring Boot Starters?

starter是SpringBoot中的一个新发明,它有效的降低了项目开发过程的复杂程度,对于简化开发操作有着非常好的效果。 starter是一种对依赖的synthesize(合成)

  • starter的理念:starter会把所有用到的依赖都给包含进来,避免了开发者自己去引入依赖所带来的麻烦。需要注意的是不同的starter是为了解决不同的依赖,所以它们内部的实现可能会有很大的差异,

  • starter的实现:虽然不同的starter实现起来各有差异,但是他们基本上都会使用到两个相同的内容:ConfigurationProperties和AutoConfiguration。因为Spring Boot坚信“约定大于配置”这一理念,所以我们使用ConfigurationProperties来保存我们的配置,并且这些配置都可以有一个默认值,即在我们没有主动覆写原始配置的情况下,默认值就会生效,这在很多情况下是非常有用的。除此之外,starter的ConfigurationProperties还使得所有的配置属性被聚集到一个文件中(一般在resources目录下的application.properties),这样我们就告别了Spring项目中XML地狱。

starter的整体逻辑:

【框架】SpringBoot_第1张图片

总结:Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,可以一站式集成Spring及其他技术,而不需要到处找示例代码和依赖包。 starter其实是把这一些繁琐的配置操作交给了自己,而把简单交给了用户。除了帮助用户去除了繁琐的构建操作,在“约定大于配置”的理念下,ConfigurationProperties还帮助用户减少了无谓的配置操作。并且因为 application.properties 文件的存在,即使需要自定义配置,所有的配置也只需要在一个文件中进行,使用起来非常方便

四、@SpringBootApplication 注解

放置在Springboot启动类上,表明该类是开启Springboot容器的入口,它是一个复合注解。里面包含了包扫描,自动注入,配置注入的功能

  1. @SpringBootConfiguration

    它表示的是该类会作为Springboot的一个配置类,进入该注解,发现里面包含@Configuration注解,@Configuration注解是Spring里面的注解,在Spring里,它表示该类也是一个配置类。进入@Configuration注解,我们发现他是被@Component所修饰的,所以该配置类也是一个组件。

  2. @EnableAutoConfiguration

    它表示开启自动配置功能。进入@EnableAutoConfiguration中,发现它仍然是一个组合注解

    • @AutoConfigurationPackage表示自动注入包:主要作用就是将@SpringBootApplication修饰的类的同包,子孙包下的所有组件都扫描到Spring容器中
    • @Import({AutoConfigurationImportSelector.class}):表示根据上述所说@Import的作用是导入组件,导入自动配置选择器的组件。 将指定的值导入到Spring容器中,帮我们进行自动配置的功能。
  3. @ComponentScan

    用来将指定包(如果未指定就是将当前类所在包及其子孙包)加入SpringIOC的包扫描,本质上等于配置

五、Spring Boot 的自动配置是如何实现的?

自动装配就是自动去把第三方组件的 Bean 装载到 IOC 容器里面,不需要开发人员再去写Bean相关的一个配置,在SpringBoot应用里面只需要在启动类上加上@SpringBootApplication注解就可以去实现自动装配
【框架】SpringBoot_第2张图片

【框架】SpringBoot_第3张图片

六、开发 RESTful Web 服务常用的注解有哪些?

restful风格,就是一种面向资源服务的API设计方式,它不是规范,不是标准,它一种设计模式。核心在于,当你设计一个系统的时候,资源是第一位的考虑,你首先从资源的角度进行系统的拆分、设计,而不是像以往一样以操作为角度来进行设计

Restful风格最大的特点为:资源、统一接口、URI和无状态。
这种风格设计的软件,可以更简洁,更有层次,更易于实现缓存等机制

常用注解:

  1. @GetMapping
    @RequestMapping(method = RequestMethod.GET)的简写
    作用:对应查询,表明是一个查询URL映射

  2. @PostMapping
    @RequestMapping(method = RequestMethod.POST)的简写
    作用:对应增加,表明是一个增加URL映射

  3. @PutMapping
    @RequestMapping(method = RequestMethod.PUT)的简写
    作用:对应更新,表明是一个更新URL映射

  4. @DeleteMapping
    @RequestMapping(method = RequestMethod.DELETE)的简写
    作用:对应删除,表明是一个删除URL映射

  5. @PatchMapping
    Patch方式是对put方式的一种补充;
    put方式是可以更新.但是更新的是整体.patch是对局部更新;

    仅仅使用一个url,用请求方式去区分增删改查,降低了url的复杂度,并且更加的统一和规范。

七、Spirng Boot 常用的两种配置文件

SpringBoot支持 properties 和 yml 两种配置方式,两种格式的功能类似,都可以完成项目的配置信息。但是properties的优先级要高于yml,而yml文件采用树状结构,直观上更加一目了然

八、Spring Boot 加载配置文件的优先级

–file:./config/
  –file:./
  –classpath:/config/
  –classpath:/

项目根目录下的/config目录下的配置文件。
项目根目录下的配置文件。
项目类路径(resources)下的/config目录下的配置文件。
项目类路径(resources)下的配置文件。
【框架】SpringBoot_第4张图片

以上是按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先级配置内容会覆盖低优先级配置内容。 同一目录下,.properties文件优先于.yml文件加载

SpringBoot会从这四个位置全部加载主配置文件,如果高优先级中配置文件属性与低优先级配置文件不冲突的属性,则会共同存在—互补配置。

如何使用Spring Boot 实现全局异常处理?

默认下,SpringBoot提供了一个 /error 映射,当我们系统发生异常,直接转到 /error 。原始错误页面很简陋,用户体验很不友好。如果想要显示给定状态码的自定义HTML错误页,可以将文件添加到error文件夹。错误页面可以是静态HTML(即添加到任何静态资源文件夹下),也可以使用模板构建。

@ControllerAdvice 注解和 @ExceptionHandler 注解

  • @ControllerAdvice:这是一个增强的 Controller, 用于定义全局异常处理类作用在所有的@Controller类型的接口上。

    使用这个 Controller ,可以实现三个方面的功能:

    全局异常处理
    全局数据绑定
    全局数据预处理

    灵活使用这三个功能,可以帮助我们简化很多工作,需要注意的是,这是SpringMVC提供的功能,在SpringBoot中可以直接使用。

  • @ExceptionHandler: 用于声明处理异常的方法,统一处理某一类异常,从而能够减少代码重复率和复杂度。

@ControllerAdvice
public class GlobalExceptionHandler {

    private Logger logger = LoggerFactory.getLogger(this.getClass());

    /**
     * 全局异常处理
     */
    @ExceptionHandler(Exception.class)
    @ResponseBody
    public ReturnMsg handleException(HttpServletRequest request, Exception e) {
        // 请求状态
        HttpStatus status = getStatus(request);

        // 返回错误信息:失败代码、失败信息、具体代码、具体信息
        return new ReturnMsg(MsgUtil.MSG_ERROR, "发生异常", String.valueOf(status.value()), status.getReasonPhrase());
    }

    /**
     * 自定义异常处理
     */
    @ExceptionHandler(value = MyException.class)
    @ResponseBody
    public ReturnMsg myErrorHandler(MyException myException) {
        // 返回错误信息:失败代码、失败信息、具体代码、具体信息
        return new ReturnMsg(MsgUtil.MSG_ERROR, "发生异常", String.valueOf(myException.getStatus()), myException.getReason());
    }
}

自动装配

在spring中,如果我们需要引入第三方依赖,需要手动配置,非常麻烦。但是在Spring Boot 中,直接引入一个 starter 即可
SpringBoot 在启动时会扫描外部引用 jar 包中的META-INF/spring.factories文件,将文件中配置的类型信息加载到 Spring 容器
简单地说就是通过一些注解和简单配置就能在springboot的帮助下实现某块功能

你可能感兴趣的:(框架,spring,java,后端)