SpringBoot 的前世今生

本文深入探讨Spring框架的设计理念,包括其轻量级编程、依赖注入、面向切面编程等核心特性,并介绍了Spring Boot如何简化Spring应用配置,以及Spring框架随版本演进的重要更新。

做java开发的同学最熟悉框架应该就属spring了,spring从诞生的那天起,他就是为了更好的管理bean,不管从前还是未来,这始终的他的目标。为了更好的学习spring,我们需要从头开始了解spring

Spring 的别称(万能胶🤣🤣)

Spring 的设计初衷

Spring是为解决企业级应用开发的复杂性而设计,她可以做很多事。但归根到底支撑Spring 的仅仅是少许的基本理念,而所有的这些基本理念都能可以追溯到一个最根本的使命∶简化开发。这是一个郑重的承诺,其实许多框架都声称在某些方面做了简化。而Spring 则立志于全方面的简化Java开发。对此,她主要采取了 4 个关键策略∶

  1. 基于 POJO 的轻量级和最小侵入性编程 ;
  2. 通过依赖注入和面向接口松耦合;
  3. 基于切面和惯性进行声明式编程 ;
  4. 通过切面和模板减少样板式代码 ;

而他主要是通过∶面向 Bean(BOP)、**依赖注入(DI)以及面向切面(AOP)**这三种方式来达成的。

Spring编程思想总结

spring思想应用场景(特点)一句话归纳
OOPObject Oriented Programming(面向对象编程)用程序归纳总结生活中一切事物。封装、继承、多态。
BOPBean Oriented Programming(面向Bean编程)面向 Bean(普通的 Java类)设计程序,解放程序员。一切从 Bean 开始。
AOPAspect Oriented Programming(面向切面编程)找出多个类中有一定规律的代码,开发时拆 开, 运行时再合并。解耦 ,专人做专事
IOCInversion of Control (控制反转)将 new 对象的动作交给 Spring 管理,并由spring保存已经创建的对象(IOC容器)移交控制权(既控制权反转)
DI/DLDependency Injection(依赖注入)或者Dependency Lookup(依赖查找)依赖注入、依赖查找,Spring 不仅保存自己创建的对象,而且保存对象与对象之间的关系。注入即赋值 ,主要三种方式构造方法、set方法、直接赋值。赋值

SpringBoot的前世今生

Spring1.x版本

在2013年左右,市场上最火的框架组合有两种

  • SpringMvc + Spring + Mybatis (ssm)
  • Struts + Spring + Hibernate (ssh)

举个例子,如果要搭建ssm的框架,那么架构师需要做的步骤如下:

  • 创建一个项目结构(maven/gradle)
  • spring的依赖,spring mvc 、servlet api、mybatis的依赖
  • 配置web.xml
  • Springmvc的配置文件
  • Spring的配置文件
  • mybatis的配置文件

可以看到,搭建一个ssm的框架需要有这么多的步骤,而每一步,都需要有很多的配置,全部都是手工配置。工作量上升的同时,还极易出错。

SpringBoot 的诞生

Springboot的诞生就是为了简化Spring中的配置问题

随着使用 Spring 进行开发的个人和企业越来越多,Spring 也慢慢从一个单一简洁的小框架变成一个大而全的开源软件,Spring 的边界不断的进行扩充,到了后来 Spring 几乎可以做任何事情了,市面上主流的开源软件、中间件都有 Spring 对应组件支持,人们在享用 Spring 的这种便利之后,也遇到了一些问题。

Spring 每集成一个开源软件,就需要增加一些基础配置,慢慢的随着人们开发的项目越来越庞大,往往需要集成很多开源软件,因此后期使用 Spirng 开发大型项目需要引入很多配置文件,太多的配置非常难以理解,并容易配置出错,到了后来人们甚至称 Spring 为配置地狱。

Spring 似乎也意识到了这些问题,急需有这么一套软件可以解决这些问题,这个时候微服务的概念也慢慢兴起,快速开发微小独立的应用变得更为急迫,Spring 刚好处在这么一个交叉点上,于 2013 年初开始的 Spring Boot 项目的研发,2014年4月,Spring Boot 1.0.0 发布。

Spring Boot 诞生之初,就受到开源社区的持续关注,陆续有一些个人和企业尝试着使用了 Spring Boot,并迅速喜欢上了这款开源软件。直到2016年,在国内 Spring Boot 才被正真使用了起来,期间很多研究 Spring Boot 的开发者在网上写了大量关于 Spring Boot 的文章,同时有一些公司在企业内部进行了小规模的使用,并将使用经验分享了出来。从2016年到2018年,使用 Spring Boot 的企业和个人开发者越来越多,我们从 Spring Boot 关键字的百度指数就可以看出。

到底什么是SpringBoot

约定优于配置理念下的一个产物

  • 只要依赖的spring-boot-starter-web的jar,就会自动内置一个tomcat容器(替换)
  • 项目结构
  • 默认提供了配置文件application.properties
  • starter启动依赖 - 如果是一个webstarter ,默认认为你是去构建一个spring mvc的应用.

SpringBoot 和微服务

为什么Spring Cloud会采用Spring Boot来作为基础框架呢?原因很简单

  1. Spring Cloud它是关注服务治理领域的解决方案,而服务治理是依托于服务架构之上,所以它仍然 需要一个承载框架
  2. Spring Boot 可以简单认为它是一套快速配置Spring应用的脚手架,它可以快速开发单个微服务。所以spring cloud的版本和spring boot版本的兼容性有很大关联

Spring Boot的特性

  • EnableAutoConfiguration 自动装配
  • Starter 启动依赖 依赖于自动装配的技术
  • Actuator 监控 , 提供了一些endpoint ,http、jmx形式去进行访问, health信息。 metrics 信 息
  • Spring Boot CLI(命令行操作的功能, groovy脚本) 客户端, groovy

Spring 注解驱动的发展过程

版本命名规则

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

spring 1.x

在SpringFramework1.x时代,其中在1.2.0是这个时代的分水岭,当时Java5刚刚发布,业界正兴起了使用Annotation的技术风,Spring Framework自然也提供了支持,比如当时已经支持了@Transactional 等注解,但是这个时候,XML配置方式还是唯一选择。

<bean name="" class=""/>

Spring 2.x

Spring Framework2.x时代,2.0版本在Annotation中添加了@Required、@Repository以及AOP相关的@Aspect等注解,同时也提升了XML配置能力,也就是可扩展的XML,比如Dubbo这样的开源框架就是基于Spring XML的扩展来完美的集成Spring,从而降低了Dubbo使用的门槛。

在2.x时代,2.5版本也是这个时代的分水岭, 它引入了一些很核心的Annotation

  • Autowired 依赖注入
  • @Qualifier 依赖查找
  • @Component、@Service 组件声明
  • @Controller、@RequestMappring等spring mvc的注解

尽管Spring 2.x时代提供了不少的注解,但是仍然没有脱离XML配置驱动,比如context:annotation-config context:componet-scan , 前者的职责是注册Annotation处理器,后者是负责扫描classpath下指定包路径下被Spring模式注解标注的类,将他们注册成为Spring Bean。

@Required/ @Repository(Dao)/@Aspect spring 2.5
@Component (组件)
@Service service
@Controller (controller)
@RequetsMapping

spring 3.x版本

Spring Framework3.0是一个里程碑式的时代,他的功能特性开始出现了非常大的扩展,比如全面拥抱 Java5、以及Spring Annotation。更重要的是,它提供了配置类注解@Configuration, 他出现的首要任务就是取代XML配置方式

  • @Configuration 去xml化 : 核心目的是:把bean对象如何更加便捷的方式去加载到Spring IOC容器中
  • Component-Scan - @Service @Repository @Controller
  • Import: 将外部的配置文件引入到项目中
Enable模块驱动

自动完成相关相关组件的bean的装配
在这里插入图片描述

Spring3.x版本中,集成Redis或者mybatis
  • 创建一个配置类
  • @bean注解来声明一个bean
@Bean
DefaultKaptcha defaultKaptcha(){
}
  • @Enable启动一个模块,把相关组件的bean自动装配到IOC容器中
ScheduledAnnotationBeanPostProcessor

在这里插入图片描述

spring 4.x版本

加入了@Conditional 注解:条件注解

spring 5.x版本

加入了@Indexed 注解:作用是,注解多的时候,相当于一个索引;

spring5 模块结构图

在这里插入图片描述
各核心模块的功能
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Spring IOC bean的装载

  • xml:xml配置文件
  • Configuration:注解类
  • Enable:模块

Spring 的动态Bean的装载

  • ImportSelector: DeferredImportSelector
  • Registator : ImportBeanDefinitionRegistrar

SPI机制 (Service provider interface)

满足以下条件

  • 需要在classpath目录下创建一个 META-INF/services
  • 在该目录下创建一个 扩展点的全路径名.
    • 文件中填写这个扩展点的实现
    • 文件编码格式UTF-8
  • ServiceLoader去进行加载

Spring Boot自动装配

条件控制

对于官方组件,是基于condition条件来决定对于类是否要自动装配,对于第三方组件,是采用spi机制 来实现扩展

  • 官方包 spring-boot-starter-xxx
  • 第三方包 xxx-spring-boot-starter
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值