特邀导师:MIC
10余年Java EE从业经验,曾就职于平安、大众点评、挖财等互联网金融公司,《Spring Cloud Alibaba微服务原理与实战》作者。
参与项目:平安支付壹钱包、上海挖财挖财宝项目
很明显的一个现象,除了一些老项目,现在 Java 后端项目基本都是基于 Spring Boot 进行开发,毕竟它好用以及天然微服务友好。毫不夸张,Spring Boot 是 Java 后端领域最最最重要的技术之一,熟练掌握它对于 Java 程序员至关重要。
这篇文章我会带你了解 Spring Boot 的原理,帮助大家深入学习 Spring Boot。
01什么是spring Boot?
Spring Boot提供了快速构建Spring Dramework应用的框架。其设计目的是用来简化Spring应用初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。
Spring Boot是如何简化的?约定优于配置,通过约定的方式来减少配置,从而提高开发效率。Spring Boot内核->(Spring Framework>约定优于配置之后)
约定优于配置的体现
①默认的Maven结构,以及默认的打包方式
②默认的配置文件application.properties
③Starer的相关jar包依赖
④Web默认包含Spring-mvc以及内置tomcat容器
⑤部署到tomcat
如何没有Spring Boot
①引入jar包
②修改web.xml,添加监听和拦截
③创建spring mvc核心配置文件dispatcher-servlet.xml
④创建controller
⑤部署到tomcat
02深度思考或简化背后的原理
Spring注解驱动的发展过程从XML配置时代到注解驱动时代 。具体如下所示:
Spring 1.x注解驱动启蒙时代
Spring 1.x 支持Annotation,虽然框架层面均已经支持@managedResource和@Transactional(事务注解)等注解,但主要还是以XML配置为准。
Spring 1.x 提供了什么功能?
提供Spring容器来托管Bean对象——Bean通过描述一个对象,Spring会加载这个配置,并且进行初始化并保存。
Spring 2.x注解驱动过渡时期
Spring 2.x在Anonotation支持方面添加了新的成员,@Required、数据相关的@Repository及AOP相关的@Aspect等,但同时提升了XML配置能力,即“可扩展的XML编写”。xml+注解的方式,无法完全脱离xml。
缺陷:bean的维护工作变得很重。
Spring 2.x提供注解:
@Reqired
@Repository
@Aspect
@Component
@Service
@Controller
举个例子:
如果扫描到当前的标签,那么意味着当前的bean会被装载。
Spring 3.x注解驱动黄金时代
Spring 3.x是一个里程牌式的时代,在3.0时代中除了提升Spring模式注解“派生”的层次性,并通过注解完全取代传统的XML形式的描述。替换XML配置方式,引入配置类注解@Configuration。
Spring 3.x提供注解:
@Configuration
@CompomentScan
@Import-导入
Spring 4.x注解驱动完善时代
Spring 4.x之后,引入条件注解@Conditional。通过自定义Condition实现配合,弥补了之前版本条件化装配的短板,4.0开始Profile反过来通过@Conditional实现。
Spring 5.x注解驱动成熟时代
Spring 5.x作为Spring Boot2.0的底层,注解驱动的性能提升方面不是很明显。在Spring Boot应用场景中,大量使用@ComponentScan扫描,导致Spring模式的注解解析时间耗时增大。因此,5.0时代引入@Indexed,为Spring模式注解添加索引。
注解驱动的意义是简化Bean的原理,描述一个需要被Spring IOC容器管理的对象。
03总结
Spring Boot 是 Java 后端领域中经常使用的技术,希望这篇文章能让你掌握Spring Boot 原理,成为更优秀的Javer。