SprintBoot深入浅出讲解场景启动器Starter

 更新时间:2022年06月06日 14:23:45   作者:孟华328  
本篇文章将和大家分享一下 Spring Boot 框架中的 Starters 场景启动器的内容,关于 Starters 具体是用来做什么的,以及在开发 Spring Boot项目前,要如何自定义一个 Starters 场景启动器

1 场景启动器 starter 简介

什么是 SpringMVC

在早期 Java Web 的开发中,统一把显示层、控制层、数据层的操作全部交给 JSP 或者 JavaBean 来进行处理,这样的弊端有:

  • JSP 和 Java Bean 之间严重耦合,Java 代码和 HTML 代码也耦合在了一起
  • 要求开发者不仅要掌握 Java ,还要有高超的前端水平
  • 前端和后端相互依赖,前端需要等待后端完成,后端也依赖前端完成,才能进行有效的测试代码难以复用

为了解决这些弊端,MVC 模式便应运诞生了。

M 代表 模型(Model)

模型是什么呢? 模型就是数据,就是 dao,bean

V 代表 视图(View)

视图是什么呢? 就是网页, JSP,用来展示模型中的数据

C 代表 控制器(controller)

控制器是什么? 控制器的作用就是把不同的数据(Model),显示在不同的视图(View)上,

Spring MVC 就是 MVC 模式的一种。Spring MVC 是 Spring 提供的一个基于 MVC 设计模式的轻量级 Web 开发框架,本质上相当于 Servlet。

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和HTTP 服务器上的数据库或应用程序之间的中间层

Spring MVC 角色划分清晰,分工明细。由于 Spring MVC 本身就是 Spring 框架的一部分,可以说和 Spring 框架是无缝集成。性能方面具有先天的优越性,是当今业界最主流的 Web 开发框架,最热门的开发技能。

什么是 SpringBoot 场景启动器 starter

在了解完Spring MVC 的相关知识后,我们切入正题。SpringBoot 之所以引入场景启动 starter,必定有其原因。使用过Spring 的朋友都知道,大量的特性配置,常常让开发人员头疼万分。归纳起来有以下两点:

依赖导入问题

每个项目都需要来单独维护自己所依赖的jar包,在项目中使用到什么功能就需要引入什么样的依赖。手动导入依赖容易出错,且无法统一集中管理

配置繁琐

在引入依赖之后需要做繁杂的配置,并且这些配置是每个项目来说都是必要的,例如web.xml配置(Listener配置、Filter配置、Servlet配置)、log4j配置、数据库连接池配置等等。这些配置重复且繁杂,在不同的项目中需要进行多次重复开发,这在很大程度上降低了我们的开发效率。

SpringBoot 的启动器就是解决上述两个问题的。

2 SpringBoot 场景启动器的原理

在导入的starter之后,SpringBoot主要帮我们完成了两件事情:

  • 相关组件的自动导入
  • 相关组件的自动配置

自动配置原理

自动配置类的获取与注入

我们从主程序入口来探索一下整个过程的原理:

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

@SpringBootApplication 相当于

可以看到,自动配置的关键是@EnableAutoConfiguration 注解。

@EnableAutoConfiguration 注解

激活自动配置注解包含了两个部分:

  • @AutoConfigurationPackage
  • @Import(AutoConfigurationImportSelector.class)

首先,讲一下 @AutoConfigurationPackage。看一下该注解的定义:

@AutoConfigurationPackage 包含了 @Import(AutoConfigurationPackages.Registrar.class)。这是一个 Spring底层注解。向容器中注入一个Registrar,该Registrar会将@SpringBootApplication主配置类所在包下的所有类都扫描进Spring容器中。

再看一下@EnableAutoConfiguration 的 @Import(AutoConfigurationImportSelector.class) 。这也是一个Spring底层注解。向容器中注入一个Selector,该Selector可以将要注入的一系列bean的全限定类名返回,并按照名称将这些bean全部注入到容器中。

Spring Factories 文件

Spring Factories 是 SpringBoot 的扩展机制之一,是基于 java SPI 。所谓SPI机制就是,为某个接口寻找服务实现的机制。有点类似IOC的思想,就是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要。

在 Spring 中也有一种类似与 Java SPI 的加载机制。它在 resources/META-INF/spring.factories 文件中配置接口的实现类名称,然后在程序中读取这些配置文件并实例化。

我们可以在spring-boot-autoconfigure包里,看一下spring.factories 文件。

在这里,我们可以看到SpringBoot官方为我们提供的所有自动配置类的候选列表。

3 总结

  • SpringBoot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的所有自动配置类的全限定类名。
  • 将这些自动配置类导入容器,自动配置类就生效,帮我们进行自动配置工作。
  • 整个J2EE的整体解决方案和自动配置都在spring-boot-autoconfigure的jar包中。
  • 它会给容器中导入非常多的自动配置类 (xxxAutoConfiguration), 就是给容器中导入这个场景需要的所有组件,并配置好这些组件。
  • 有了自动配置类,免去了我们手动编写配置注入功能组件等的工作。

到此这篇关于SprintBoot深入浅出讲解场景启动器Starter的文章就介绍到这了,更多相关SprintBoo场景启动器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • mybatis二级缓存的实现代码

    mybatis二级缓存的实现代码

    这篇文章主要为大家详细介绍了mybatis二级缓存的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • IDEA下载并大学生edu邮箱认证免费使用教程(图文)

    IDEA下载并大学生edu邮箱认证免费使用教程(图文)

    这篇文章主要介绍了IDEA下载并大学生edu邮箱认证免费使用教程(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • spring cloud gateway跨域全局CORS配置方式

    spring cloud gateway跨域全局CORS配置方式

    这篇文章主要介绍了spring cloud gateway跨域全局CORS配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Mybatis-plus插入数据遇到主键没有默认值的情况

    Mybatis-plus插入数据遇到主键没有默认值的情况

    这篇文章主要介绍了Mybatis-plus插入数据遇到主键没有默认值的情况,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • 基于ArrayList初始化长度的作用及影响

    基于ArrayList初始化长度的作用及影响

    这篇文章主要介绍了基于ArrayList初始化长度的作用及影响,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • 一文带你入门JDK8新特性——Lambda表达式

    一文带你入门JDK8新特性——Lambda表达式

    这篇文章主要介绍了JDK8新特性——Lambda表达式的相关资料,帮助大家更好的理解和学习JAVA开发,感兴趣的朋友可以了解下
    2020-08-08
  • java追加写入txt文件的方法总结

    java追加写入txt文件的方法总结

    在本篇文章里我们给大家整理了关于java如何追加写入txt文件的方法和代码,需要的朋友们可以参考下。
    2020-02-02
  • 详解Spring Boot 打包分离依赖JAR 和配置文件

    详解Spring Boot 打包分离依赖JAR 和配置文件

    这篇文章主要介绍了Spring Boot 打包分离依赖JAR 和配置文件,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Spring Boot使用和配置Druid

    Spring Boot使用和配置Druid

    本篇文章主要介绍了Spring Boot使用和配置Druid,Druid号称是Java语言中最好的数据库连接池,并且能够提供强大的监控和扩展功能
    2017-04-04
  • Kotlin 和 Java 混合开发入门教程

    Kotlin 和 Java 混合开发入门教程

    这篇文章主要介绍了入门 Kotlin 和 Java 混合开发,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09

最新评论