当前位置: 首页 > web >正文

SpringBoot的前世今生

1. Spring

Spring 特性:IOC、AOP、DI,

Spring:解决对象耦合的问题,在 applicationContext.xml 中申明 bean,Spring在启动时会解析xml文件进行装载,当需要用对象时直接从容器中拿取bean。

Spring万能胶:方便集成各种插件中间件。

Spring本身的这个组件是轻量级,但是配置是重量级。因为所有组件的描述、依赖都需要添加对应的xml配置。

用SpringMVC去构建一个web项目的流程:

→ 创建一个项目结构(maven/ gradle)

→ pom.xml中 添加 spring依赖,spring mvc、servlet api 等等的依赖 

→ 配置WEB-INF/web.xml, 配置 DispatcherServlet (spring mvc是在 jsp servlet 之上做的封装,所以需要配置dispatcherservlet 去拦截spring的请求) 

→ 启动一个spring mvc的配置,Dispatcher-serclet.xml 

 创建一个Controller 发布一个 http 请求 

→发布到 jsp/servelt 容器

可以看出,除了 创建一个Controller 发布一个 http 请求,其它步骤都是通用模板

2. SpringBoot

SpringBoot 产生的原因:

① Spring配置的重量级。

② 对于项目构建过程中spring需要添加太多通用性模板性的配置。

③ 微服务萌芽阶段,正好也需要这样一个轻量级的服务化架构。

到底什么是 SpringBoot?——Applications that you can just run

(可以认为 SpringBoot 是 SpringFramework 的一个脚手架,可以使用SpringBoot 快速构建一个基于 SpringFramework 的应用 )

约定大于配置,使用 SpringBoot 只需关注 → 创建一个Controller 发布一个 http 请求 步骤,其它步骤 SpringBoot 已按照默认约定自动完成。

  • 只要依赖 Spring-boot-starter-web 的 jar 包,就会自动内置一个 tomcat容器;(默认支持四种web容器:tomcat、jetty、undertow、reactor)
  • 项目结构
  • 默认提供了配置文件 application.properties. (项目中 ${key} 的引用会默认从application.properties中找key对应的value)
  • starter启动依赖-如果是一个webstarter,默认认为你是去构建一个spring mvc的应用。

SpringBoot的特性

  • EnableAutoConfiguration 自动装配
  • Starter 启动依赖 依赖于自动装配的技术
  • Actuator 监控 提供了一些endpoint,可以基于http、jmx形式去访问health、mrtrics信息...
  • SpringBoot CLI (命令行操作的功能,可以在客户端基于groovy脚本快速构建springboot应用)

(这些特性并非springboot创造的,spring也支持特性,不过SpringBoot在Spring基础上进一步做了封装)

3. Spring 注解驱动的发展过程

SpringBoot的快速发展某种程度上依赖于Spring的注解驱动。

  • spring 1.x :IOC的功能
  • spring 2.x: 引入了一些注解@Required/ @Repository/ @Aspect

                spring 2.5:@Controller、@Seivice、@Component、@RequestMapping

  • spring 3.x:里程碑版本,
    •  @Configuration 取代 xml 文件,去 xml 化。核心目的:把bean对象更加便地加载到springIOC容器中
    • @ComponentScan:扫描@Service、@Repository、@Controller
    • @Import
    • @Enable模块驱动:自动把模块相关组件的bean自动装配到IOC容器中。(如果没有这种方式,需要用@bean去装配,很难装配完全)(Enable可以自定义)

http://www.xdnf.cn/news/8255.html

相关文章:

  • python 中 SchedulerManager 使用踩坑
  • Spring AI之Advisors (增强器)
  • 中证500股指期货的名词解释
  • Ubuntu-多显示器黑屏问题及nvidia显卡驱动安装
  • 华为模拟器练习简单的拓扑图(五台交换机和pc,4台路由器)
  • MongoDB数据库在现代应用中的高效实践与优化策略
  • 47页 @《人工智能生命体 新启点》中國龍 原创连载
  • Linux下的Socket编程
  • 多端协同开发能力大比拼: AI 编程工具技术架构对比
  • 华为2025年校招笔试真题手撕教程(一)
  • vue3项目动态路由的相关配置踩坑记录
  • LeetCode Hot100 (双指针)
  • 什么是出入库管理系统?2025年五大出入库管理软件推荐
  • 部署TOMEXAM
  • (tarjan 缩点)洛谷 P3119 USACO15JAN Grass Cownoisseur G 题解
  • 文章被检测出是AI写的怎么办?
  • 手写Tomcat(二)—Tomcat简化模型架构
  • 2023河南CCPC省赛vp部分补题
  • 电子墨水电子阅读器行业2025数据分析报告
  • 如果教材这样讲--碳膜电阻、金属氧化膜电阻、金属膜电阻、保险丝电阻、绕线电阻的区别和用途
  • 618服饰大促新打法:在抖音解锁增长三连击
  • 深入理解 PlaNet(Deep Planning Network):基于python从零实现
  • 50、js 中var { ipcRenderer } = require(‘electron‘);是什么意思?
  • Android System UI 深度解析:从架构演进到车载 / TV 场景的全维度定制
  • go中len和sizeof区别
  • 初学c语言18(自定义类型:结构体)
  • 【DAY26】函数专题1:函数定义与参数
  • 供应链管理:联合国/我国 41个产业/工业大类包括什么/代表公司
  • 【25软考网工】第七章(4)DHCP、DNS
  • 深入理解 BFC:网页布局的关键机制