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场景启动器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • Java中双向链表详解及实例

    Java中双向链表详解及实例

    这篇文章主要介绍了Java中双向链表详解及实例的相关资料,需要的朋友可以参考下
    2017-04-04
  • 使用spring框架ResponseEntity实现文件下载

    使用spring框架ResponseEntity实现文件下载

    这篇文章主要介绍了使用spring框架ResponseEntity实现文件下载,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • Spring Boot Admin 监控指标接入Grafana可视化的实例详解

    Spring Boot Admin 监控指标接入Grafana可视化的实例详解

    Spring Boot Admin2 自带有部分监控图表,如图,有线程、内存Heap和内存Non Heap,这篇文章主要介绍了Spring Boot Admin 监控指标接入Grafana可视化,需要的朋友可以参考下
    2022-11-11
  • Java编程一道多线程问题实例代码

    Java编程一道多线程问题实例代码

    这篇文章主要介绍了Java编程一道多线程问题实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • java 单例模式容易忽略的细节

    java 单例模式容易忽略的细节

    这篇文章主要介绍了java 单例模式容易忽略的细节,帮助大家更好的理解和使用java 单例模式,感兴趣的朋友可以了解下
    2020-12-12
  • java读取excel表格的方法

    java读取excel表格的方法

    这篇文章主要为大家详细介绍了java读取excel表格的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • 关于Spring总结(必看篇)

    关于Spring总结(必看篇)

    下面小编就为大家带来一篇关于Spring总结(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • java实现的各种排序算法代码示例

    java实现的各种排序算法代码示例

    这篇文章主要介绍了java实现的各种排序算法代码示例,比较全面,代码亲测可用,如有不足之处,欢迎留言指出。
    2017-10-10
  • IDEA使用Mybatis插件 MyBatisCodeHelper-Pro的图文教程

    IDEA使用Mybatis插件 MyBatisCodeHelper-Pro的图文教程

    这篇文章主要介绍了IDEA使用Mybatis插件 MyBatisCodeHelper-Pro的教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • Mybatis 实现动态组装查询条件,仿SQL模式

    Mybatis 实现动态组装查询条件,仿SQL模式

    这篇文章主要介绍了Mybatis 实现动态组装查询条件,仿SQL模式的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06

最新评论