Spring框架介绍

2023-05-16

开篇提问

  1. 什么是Spring
  2. 为什么要使用Spring?

1. 什么是Spring?

摘自百度百科

Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。

Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。

控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。

面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。

容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。

框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。

所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。

我对Spring的理解

Spring是一个开源框架,其实更像是java语言的一个生态,是服务端开发的基石。因为我们使用的Spring Boot、Spring Cloud、Spring Batch等框架都是以Spring为基础进行开发的。
Spring中非常重要的核心功能是IOCAOP

什么是IOC?什么是DI?

IOC(Inversion Of Controll,控制反转) 是一种设计思想,将原本在程序中手动创建对象的控制权,交由给Spring框架来管理。IOC容器是Spring用来实现IOC的载体,IOC容器实际上就是一个Map(key, value),Map中存放的是各种对象。

这样可以很大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。IOC容器就像一个水桶,管理的对象是水桶中的水。当需要创建一个对象,只需要配置好配置文件/注解即可,不用考虑对象是如何被创建出来的,大大增加了项目的可维护性且降低了开发难度。

对象管理方式对比
从上图可以看到传统方式管理对象需要客户端维护对象之间的依赖关系。由应用主动管理对象的方式可以称为是控制正转(只是为了区分控制反转自己想到的名称,并不是官方解释)。

在使用IOC容器后,应用不再管理对象,而把对象的管理工作交给了IOC容器处理,这样客户端在使用对象时就无需关心对象之间依赖关系。使应用的正向操作更简单

IOC和DI的区别

IOC是一种实现思想,DI是具体的实现方式。它们是同一个概念不同角度的描述,只是他们的描述方向不一样

控制反转是从容器方面,容器控制应用程序的创建,并且为其提供需要调用的外部资源。
依赖注入是从应用程序方面,应用程序依赖容器进行创建,并且注入它所需要的外部资源

什么是AOP?

AOP(Aspect Orient Programming),翻译过来的意思是面向切面编程,是对面向对象编程的一个补充。
当需要增加非业务功能时,比如记录日志、上报埋点、权限拦截、参数校验等通用的功能时,使用切面编程可以与业务代码解耦。
AOP常用功能
举个例子:
当我们提供Controller接口时,对公共的参数做非空条件校验。
AOP对比
不使用AOP时接口需要执行校验逻辑,如果把校验逻辑封装到AOP切面中,接口则无需关心校验参数功能,AOP可以做到一处编写,多处使用,从而让研发更专注于业务功能,通用功能交给AOP处理

2. 为什么使用Spring?

Spring是一个成熟的轻量级框架,开发Java应用程序提供了完整的基础架构支持,能够帮助研发快速搭建一个服务端应用。
通过上面对于IOC和AOP的介绍,对于Spring框架有了基础认识,上面介绍的只是Spring的核心功能。能够帮助研发更专注与业务,基础功能交给Spring来管理。

官网描述

官网对于Spring的描述

翻译:
官网链接:https://spring.io/why-spring

Spring使用范围广
Spring 的灵活库受到全世界开发人员的信赖。Spring 每天为数百万最终用户提供令人愉悦的体验——无论是流媒体电视,网上购物,或无数其他创新解决方案。Spring 也有来自所有科技巨头的贡献,包括阿里巴巴、亚马逊、谷歌、微软等。

Spring灵活性高
Spring 灵活而全面的扩展集和第三方库让开发人员可以构建几乎任何可以想象的应用程序。Spring 框架的核心是控制反转 (IoC)和依赖注入 (DI)特性为广泛的特性和功能集提供了基础。无论您是为 Web 构建安全、反应式、基于云的微服务,还是为企业构建复杂的流数据流,Spring 都有可以提供帮助的工具。

Spring开发速度快
Spring Boot改变您处理 Java 编程任务的方式,从根本上简化您的体验。Spring Boot 结合了应用程序上下文和自动配置的嵌入式 Web 服务器等必需品,微服务发展小菜一碟。为了更快,您可以将 Spring Boot 与 Spring Cloud 丰富的支持库、服务器、模式和模板集相结合,以安全地将整个基于微服务的架构部署到云,在创纪录的时间内。

Spring运行速度快
我们的工程师非常关心性能。使用 Spring,您会注意到默认情况下快速启动、快速关闭和优化执行。Spring 项目也越来越多地支持反应式(非阻塞)编程模型,效率更高。开发人员的生产力是 Spring 的超能力。Spring Boot 可帮助开发人员轻松构建应用程序,并且比其他竞争范式更省力。嵌入式 Web 服务器、自动配置和“fat jars”可帮助您快速入门,创新如Spring DevTools 中的 LiveReload意味着开发人员可以比以往更快地迭代。您甚至可以在几秒钟内启动一个新的 Spring 项目,Spring Initializr 位于start.spring.io.

Spring安全性高
Spring 在快速、负责任地处理安全问题方面有着良好的记录。Spring 提交者与安全专家合作,修补和测试任何报告的漏洞。第三方依赖项也受到密切监控,并定期发布更新以帮助确保您的数据和应用程序尽可能安全。此外,Spring Security让您更轻松地与行业标准的安全方案集成,并提供默认安全的值得信赖的解决方案。

Spring社区活跃
Spring 社区是巨大的、全球性的、多样化的,涵盖了所有年龄和能力的人,从完全的初学者到经验丰富的专业人士。无论您在旅途中的哪个阶段,都可以找到使您更上一层楼所需的支持和资源:快速入门,指南和教程,视频,聚会,支持,甚至是正式的培训和认证.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring框架介绍 的相关文章

随机推荐

  • Cannot create PoolableConnectionFactory (Access denied for user 'root'@'localhost' (using password:

    新下载的项目 xff0c 测试时出现Cannot create PoolableConnectionFactory Access denied for user 39 root 39 64 39 localhost 39 using pas
  • 阿里云部署nginx服务器存储图片

    最近想将本地的代码部署到阿里云上 xff0c 1 首先遇到的一个问题就是nginx服务器上传图片连接失败的问题 因为阿里云使用的不是iptables防火墙 xff0c 而是firewalld防火墙 可以在阿里云中选择自己的实例 xff0c
  • windows系统mysql解压版安装教程

    目录 xff1a 1 下载mysql 5 7 18 winx64 zip压缩包 xff1b 2 解压压缩包 xff1b 3 配置mysql环境变量 xff1b 4 新建my ini文件 xff1b 5 安装mydsql xff1b 6 初始
  • 去哪儿2017校园招聘笔试题

    span class hljs keyword import span java util Scanner span class hljs javadoc filename extension 时间限制 xff1a C C 43 43 语言
  • 刷机镜像

    android设备从硬件到系统的结构 xff1a Bootloader是一个叫uboot的程序 xff0c 其支持非常多的体系结构 uboot编译后会生成uboot bin镜像 xff0c 可以作为bootloader使用 Bootload
  • 日志文件xml

    lt xml version 61 34 1 0 34 encoding 61 34 UTF 8 34 gt lt ConsoleAppender 控制台输出日志 gt lt appender name 61 34 STDOUT 34 cl
  • 软件测试之SDK开发(ios)——Cpp Exception捕获

    ios虽然是用OC语言或Swift语言进行编程 xff0c 但是它同时也支持c 43 43 语法 xff0c 底层的动态库也基本上都是C 43 43 编写的 所以ios在运行的时候 xff0c 可能会抛出C 43 43 异常 xff0c 如
  • SmartChat技术服务支持

    ChatGPT是一项革命性的技术 xff0c 本应用利用该先进的人工智能技术为用户进行聊天和创作 xff0c 帮助用户轻松愉快的解决生活或者工作中的问题 xff0c 为用户带来全新不一样的人工智能体验 主要功能 智能机器人聊天 智能创作 技
  • noVNC安装与使用

    参考文章 https blog csdn net qq 41865652 article details 121766828 参考文章 http www zhumeng org thread 292491 1 1 html https ww
  • ubuntu系统下,下载安装Python程序的方法汇总(wget;apt-get;easy_install;pip)

    1 源码安装 xff1a 已知源码的地址 xff0c 例如 xff1a https www python org ftp python 3 6 1 Python 3 6 1 tgz 这是Python3 6 1的源码地址 xff0c 则可以使
  • iOS获取当前项目的所有类

    获取当前工程下自己创建的所有类 xff08 不包含系统类 xff0c CocosPods类 xff09 import lt objc runtime h gt import lt dlfcn h gt import lt mach o ld
  • android编译排查指南

    1 Can t determine type for tag macro name 参考https blog csdn net weixin 44440669 article details 127753568 进行降级 implement
  • Matlab的autocorr自相关函数

    今天看了一下时间序列模型ARIMA模型 xff0c 在对数据处理的时候 xff0c 需要对其进行平稳性检验 对序列的平稳性的检验有两种检验方法 xff1a 一种是根据时序图和自相关图的特征作出判断的图检验 xff0c 该方法操作简单 xff
  • 模型选择准则之AIC和BIC

    参考文章http blog csdn net lynnucas article details 47947943 转自 xff1a http blog csdn net jteng article details 40823675 此处模型
  • 最小二乘法曲线拟合原理与实现

    参考文章http blog csdn net jairuschan article details 7517773 最小二乘学习法是对模型的输出和训练集输出的平方误差为最小时的参数进行学习 xff0c 式中之所以加上系数1 2 是为了约去对
  • 浅谈决策树算法以及matlab实现ID3算法

    决策树方法在分类 预测 规则提取等领域有着广泛的应用 在20世纪70年代后期和80年代初期 xff0c 机器学习研究者J Ross Quinilan提出了ID3算法以后 xff0c 决策树在机器学习 数据挖掘领域得到极大的发展 Quinil
  • 关联规则浅谈以及Apriori算法matlab实现

    关联规则分析也叫做购物篮分析 xff0c 最早是为发现超市销售数据库中不同商品之间的关联关系 例如一个超市的经理想要更多的了解顾客的购物习惯 xff0c 比如 哪组商品可能会在一次购物中同时被购买 xff1f 或者 某顾客购买了个人电脑 x
  • Expression #1 of ORDER BY clause is not in SELECT list,references column ‘xxxxxxx‘(亲测有效,网上很多是有问题的)

    亲测有效 xff01 网上很多帖子有BUG xff0c 一直失败 xff0c 最后终于弄好了 所以必须分享下 xff0c 以免大家按照错误的帖子浪费时间 xff01 报错信息 xff1a Expression 1 of ORDER BY c
  • 解决 DataBinding Unresolved reference: BR 问题

    问题 最近使用了databinding xff0c 在使用BaseObservable的时候出现了Unresolved reference BR 问题 xff0c 上网搜了一下 xff0c 都是抄来抄去的 xff0c 没解决我的问题 spa
  • Spring框架介绍

    开篇提问 什么是Spring为什么要使用Spring xff1f 1 什么是Spring xff1f 摘自百度百科 Spring是一个开源框架 xff0c 它由Rod Johnson创建 它是为了解决企业应用开发的复杂性而创建的 Sprin