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

目录
  • 1 场景启动器 starter 简介
    • 什么是 SpringMVC
    • 什么是 SpringBoot 场景启动器 starter
  • 2 SpringBoot 场景启动器的原理
    • 自动配置原理
    • Spring Factories 文件
  • 3 总结

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

(0)

相关推荐

  • Java SpringBoot自定义starter详解

    目录 一.什么是SpringBoot starter机制 二.为什么要自定义starter ? 三.什么时候需要创建自定义starter? 四.自定义starter的开发流程(案例:为短信发送功能创建一个starter) 1.细节:命名规范 2.必须引入的依赖 3.编写相关属性类(XxxProperties):例如 SmsProperties.java 4.编写Starter项目的业务功能 5.编写自动配置类AutoConfig 6.编写spring.factories文件加载自动配置类 7.打

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

    目录 1 场景启动器 starter 简介 什么是 SpringMVC 什么是 SpringBoot 场景启动器 starter 2 SpringBoot 场景启动器的原理 自动配置原理 Spring Factories 文件 3 总结 1 场景启动器 starter 简介 什么是 SpringMVC 在早期 Java Web 的开发中,统一把显示层.控制层.数据层的操作全部交给 JSP 或者 JavaBean 来进行处理,这样的弊端有: JSP 和 Java Bean 之间严重耦合,Java

  • springboot 场景启动器使用解析

    这篇文章主要介绍了springboot 场景启动器使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 为什么springboot不需要我们去配置那么繁琐的东西? 我们直接看pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmln

  • C语言深入浅出讲解顺序表的实现

    目录 1.线性表 2.顺序表 2.1 概念及结构 2.2 提供接口 2.3 接口实现 今天起开始编写数据结构中的各种数据结构及算法的实现,说到顺序表,我们首先得了解下线性表. 1.线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列. 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表.链表.栈.队列.字符串… 线性表在逻辑上是线性结构,也就说是连续的一条直线.但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储. 2.顺序表

  • SpringBoot自定义启动器Starter流程详解

    目录 一.背景 二.自定义启动器 1.创建一个启动器的自动配置模块 2.创建一个启动器模块 3.在业务模块中引入启动器 一.背景 虽然Spring官方给我们提供了很多的启动器供我们使用 但有时候我们也会遇到某些特殊场景,这些启动器满足不了 这个时候就需要自定义一个启动器供我们使用 二.自定义启动器 在之前学习Spring Boot的过程中,我们已经对启动器有了一个大致的了解 Spring Boot实现某个功能,一般是引入对应场景的启动器(一般不写代码,只是声明这个启动器需要引用哪些依赖),然后这

  • 深入浅出讲解Java中的枚举类

    目录 一.枚举类的使用 二.如何定义枚举类 背景:类的对象只有有限个,确定的.举例如下: > 星期: Monday (星期一).-.. Sunday (星期天) > 性别: Man (男). Woman (女) > 季节: Spring (春节).--.. Winter (冬天) > 支付方式: Cash (现金). WeChatPay (微信). Alipay (支付宝) BankCard (银 行卡). CreditCard (信用卡) > 就职状态: Busy . Fr

  • 深入浅出讲解Java集合之Collection接口

    目录 一.集合框架的概述 二.集合框架(Java集合可分为Collection 和 Map 两种体系) 三.Collection接口中的方法的使用 四.集合元素的遍历操作 A. 使用(迭代器)Iterator接口 B. jdk5.0新增foreach循环,用于遍历集合.数组 五.Collection子接口之一:List接口 List接口方法 ArrayList的源码分析: JDK 7情况下: JDK 8中ArrayList的变化: LinkedList的源码分析: Vector的源码分析: 六.

  • 深入浅出讲解Java集合之Map接口

    目录 一.Map接口继承树 二.Map接口中的常用方法 三.源码分析 1. HashMap的底层实现原理? 2.LinkedHashMap的底层实现原理(了解) 四.Collections工具类 一.Map接口继承树 Map:双列数据,存储key-value对的数据 ---类似于高中的函数:y = f(x) A.HashMap:作为Map的主要实现类:线程不安全的,效率高:存储null的key和value a.LinkedHashMap:保证在遍历map元素时,可以按照添加的顺序实现遍历. 原因

  • C语言 深入浅出讲解指针的使用

    目录 一.利用指针倒序字符串 二.题目实例 三.总结 一.利用指针倒序字符串 void _reversal(char* left, char* right) { while (left < right) { char tmp = *left; *left = *right; *right = tmp; left++; right--; } } 通过上述代码不难看出,left与right分别代表一个字符数组的首端和尾端,通过中间变量 tmp进行首尾交换,left++中的left是char*类型,同

  • 深入浅出讲解Spring框架中依赖注入与控制反转及应用

    目录 一. 概念: 1. 使用前: 2. 使用后: 二. 理解控制反转(Ioc): 三. IoC的应用方法 一. 概念: 依赖注入(Dependency Injection,DI)与控制反转(IoC)的含义相同,只不过是从两个角度描述的同一个概念.对于一个Spring初学者来说,这两种称呼都很难理解,我们通过简单的语言来描述这两个概念. 使用对比: 1. 使用前: 当某个Java对象(调用者)需要调用另一个Java对象(被调用者,就是被依赖对象)时,在传统模式下,调用者通常会采用"new被调用者

  • 深入浅出讲解Spring框架中AOP及动态代理的应用

    目录 一. Spring AOP 1. 传统问题: 2. 问题的解决策略: 3. AOP优点: 二.  动态代理 1.JDK动态代理 2. CGLIB代理 一. Spring AOP 面向切面编程(Aspect Oriented Programming,AOP)是软件编程思想发展到一定阶段的产物,是对面向对象编程(Object Oriented Programming,OOP)的有益补充, 目前已成为一种比较成熟的编程方式.AOP适用于具有横向逻辑的场所,如访问控制.事务管理.性能监测等. 1.

随机推荐