SprintBoo场景启动器
孟华328 人气:01 场景启动器 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), 就是给容器中导入这个场景需要的所有组件,并配置好这些组件。
- 有了自动配置类,免去了我们手动编写配置注入功能组件等的工作。
加载全部内容