深入理解Spring:Spring

8 篇文章 0 订阅
订阅专栏

目录

1、Spring介绍

1.1、什么是 Spring Framework

1.2、Spring的8类模块

1.3、Spring用到哪些设计模式

1.4、Spring异常处理机制

1.5、Spring自动装配

2、Spring循环依赖

2.1、什么是循环依赖,什么情况出现

2.2、如何解决循环依赖

2.2.1、Spring自己的三级缓存解决

2.2.2、为什么使用三级缓存而不是二级缓存

2.2.3、为什么不只使用一级缓存

2.2.4、@Lazy注解解决

3、Spring事物

3.1、什么是事物

3.2、Spring中事物的实现/管理方式

3.2、Spring中事物的隔离级别(5个)

3.3、Spring事物的传播机制/行为


1、Spring介绍

1.1、什么是 Spring Framework

就是一个框架,简称Spring。提供一系列功能和特性,例如依赖注入、控制反转、面向切面编程、事物管理、数据访问、MVC等。

1.2、Spring的8类模块

(1)核心模块(Spring  Core):

  • Spring Beans:  提供IOC和DI服务,其他模块都依赖它;
  • Spring Core:  核心类库,所有功能都依赖该类库;
  • Spring Context:  是BeanFactory的扩展,提供更多功能如国际化、资源管理
  • SpEL:表达式语言,例如@、#、{}、AOP切面表达式、XML的<>等

(2)数据存储模块:Spring JDBC、ORM等

(3)Web模块:WebSocket、MVC等

(4)Spring AOP模块:面向切面编程

(5)Test测试模块:提供对单元测试、集成测试、端到端测试的支持

(6)Instrumentation模块:Java代理API,用于监控和管理JVM虚拟机上的应用程序

(7)Messaging模块:消息模块

(8)Aspects模块:Aspects提供更高级面向切面编程的框架,可以和其他模块集成

1.3、Spring用到哪些设计模式

  • 工厂设计模式 : Spring使用工厂模式通过 BeanFactoryApplicationContext 创建 bean 对象。

  • 代理设计模式 : Spring AOP 功能的实现。

  • 单例设计模式 : Spring 中的 Bean 默认都是单例的。

  • 模板方法模式 : Spring 中 jdbcTemplatehibernateTemplate 等以 Template 。

  • 策略模式 : Resource资源获取实现类,针对不同的资源实现不同的资源获取策略,如UrlResource、ClassPathResource

  • 适配器模式 :Spring MVC 中用到了适配器模式适配Controller

1.4、Spring异常处理机制

主要集中在Spring MVC模块中,用于处理Web应用程序中的异常情况。 异常分为编译时异常和运行时异常,编译时异常我们 try-cache 进行捕获后自行处理,而运行时异常是不可预期的。

(1)全局异常处理器

(2)自定义异常处理

(3)@ExceptionHandler等注解捕获异常处理

1.5、Spring自动装配

参考: 深入理解Spring:Bean---4、bean自动装配几种方式

2、Spring循环依赖

2.1、什么是循环依赖,什么情况出现

类与类之间的依赖关系形成了闭环。循环依赖问题在Spring中有以下三种情况:

(1)通过构造方法注入时产生循环依赖;

(2)通过Setter方法注入且是 多例 模式下产生循环依赖;

(3)通过Setter方法注入且是单例模式下产生循环依赖---已解决(只有这种被解决了)

其他2种都会异常,因为

第一种在new对象的时候会堵塞住;例如Bean A-->Bean B -->Bean C Spring先创建C,接着创建B(将C注入B),最后创建A(将B注入A),当存在循环依赖时Spring无法决定先创建哪个Bean,就会报错。该方式经常发生循环依赖。

第二种每一次在getBean()的时候都会产生一个新的Bean,如此反复下去就会有无数个Bean产生,最终导致OOM;

2.2、如何解决循环依赖

2.2.1、Spring自己的三级缓存解决

通过二级缓存和三级缓存解决,三级缓存是重点。核心思想是在对象实例化之后,依赖注入之前,Spring提前暴露 Bean实例的引用也就是代理对象 在第三集缓存中进行存储。

2.2.2、为什么使用三级缓存而不是二级缓存

  • 一级缓存(singletonObjects)存放已经创建并初始化完的Bean实例;
  • 二级缓存(earlySingletonObjects)存放已经创建但未初始化的Bean实例;
  • 三级缓存(singletonFactories)存放用于创建Bean的代理对象ObjectFactory,该缓存只对内使用,Spring框架内部逻辑使用该缓存。

当循环依赖存在时,两个Bean都存在二级缓存中等待对方创建完成,将导致死锁的发生。三级缓存允许在循环依赖时暂时存储已经创建但未初始化的Bean实例,并且通过ObjectFactory代理对象工厂来延迟创建Bean的实例,这样可以避免二级缓存的死锁问题。

触发解决循环依赖时Spring从三级缓存获取代理对象ObjectFactory并使用他创建Bean实例,提前暴露Bean对象的引用(实例化之后,依赖注入之前),然后将该实例放入以及缓存中,并最终初始化完成

(三个缓存是彼此互斥的,一个Bean只会存在一个地方,读取顺序为一、二、三)

2.2.3、为什么不只使用一级缓存

一级缓存设置存放创建和初始化完整的Bean对象,如果存在完整和不完整的则会丢失存储,违反了设计原则

2.2.4、@Lazy注解解决

主要解决构造函数相互注入的循环依赖。前面的是Spring自动解决单例模式下Settter()方法注入的循环依赖,而构造方法造成的无法自动解决。

使用方法:A类和B类都是通过构造器注入的,可在A或B构造函数形参加@Lazy注解实现延迟加载

实现原理:当实例化对象时发现参数或者属性有@Lazy注解修饰,就不直接创建所依赖的对象了而是用动态代理创建一个代理类,这样就不是直接依赖而是依赖代理类了(例如A a=new A(B))。

3、Spring事物

3.1、什么是事物

Spring事物其实就是数据库的事物,Spring自己没事物,它只提供统一事物管理接口,具体事物由不同数据库自己实现,redo log: 数据库事物提交、undo log:数据库事物回滚。是一组操作要么全部完成要么全部不完成

3.2、Spring中事物的实现/管理方式

(1)编程式事物:在代码中硬编码(不推荐使用);

(2)声明式事物:在配置文件中配置(推荐使用,建立在AOP之上)——分为两种

  • 基于XML的声明式事物;
  • 基于注解(@Transactiona)的声明式事物。

(本质是通过AOP对方法前后进行拦截,将事物处理功能编织到拦截方法中,在目标方法之前启动一个事物,在执行完目标方法之后根据执行情况提交或者回滚事物)

3.2、Spring中事物的隔离级别(5个)

  • 默认;
  • 最低隔离级别(脏读、幻读、不可重复读)——读取未提;
  • Oracle默认(幻读、不可重复读)——读取已提交;
  • MySQL默认——可重复读(幻读);
  • 最高隔离级别——可串行化

3.3、Spring事物的传播机制/行为

定义了在一个事务方法调用另一个事务方法时,新方法如何参与现有事务的规则。

这些传播行为可以通过 @Transactional 注解的属性来指定:

(1)required(默认):如果当前存在事务,则加入该事务,如果没有事务则新建一个事务

(2)required_new:无论当前是否存在事务,都会开启一个新的事务,如果已存在事务则将当前事务挂起。

(3)supports:如果当前存在事务,则加入该事务,如果没有事务则以非事务的方式执行

(4)no_supported:以非事务的方式执行操作,如果当前存在事务,则将其挂起

(5)never:要求当前不存在事务,如果存在则抛出异常

​  参考资料:《Spring技术内幕》

Spring 揭秘 全面 深入了解Spring
01-16
Spring 开发的必备良师益友 帮您洞穿Spring
Spring深入理解
weixin_45226315的博客
10-17 332
Spring深入理解 本文链接:https://blog.csdn.net/nihui123/article/details/82917121 在学习Spring之前首先来看一张图,通过对于这张图的理解进入我们需要学习的Java框架S 这张图上展示了一个基于SSH,B/S结构的单体Java应用的搭建过程,首先通过浏览器进入到Filter拦截器,进入到Structs2,通过Service层进入到Hi......
深入浅出Spring框架:从入门到精通
最新发布
qq_63289396的博客
08-26 898
<myTag name="自定义标签的名称" value="自定义标签的值"/>
深入了解spring
酷爱编程的小猿同学
04-04 494
一、spring是一个开源的轻量级(零配置)的Java SE开发应用框架,其目的是用于简化企业级应用程序开发,一个完整的应用程序是由很多对象组成,而spring可以创建和很好的管理这些对象,这样做可以减少我们的工作,大大提高了效率,spring能无缝的整合其他框架,并将java设计模式表现的淋漓尽致。 控制反转(IOC):通过spring来初始化和实例化(把控制权交给spring) ioc...
深入了解Spring
lc1361161496的博客
10-16 56
Spring是一个开源的轻量级(零配置)的Java SE开发应用框架,其目的是用于简化企业级应用程序开发,一个完整的应用程序是由很多对象组成,而Spring可以创建和很好的管理这些对象,这样做可以减少我们的工作,大大提高了效率,Spring能无缝的整合其他框架,并将java设计模式表现的淋漓尽致。举例:IOC容器,有个Register(注册器)的东西(为了告诉我们的容器,在这个类被初始化的过程,需要做很多不同的逻辑处 理,需要实现多个入围只想着,分别实现各自的功能)
Spring深入理解
H1319的博客
11-24 373
Spring相关概念 1.1. Spring是开源的轻量级框架 1.2. Spring是一站式框架, 1.2.1. Spring在Javaee三层结构,每一层提供不同的解决技术。 -web层:springMVC -service层:spring的ioc -dao层:spring的jdbcTemplate. 1.3. Spring核心主要两部分: 1.3.1. Aop:面向切面编程,扩展功能不是...
方志朋版——深入理解Spring Cloud与微服务构建.pdf
07-30
深入理解Spring Cloud与微服务构建》是针对Java开发者,特别是对微服务架构感兴趣的开发者的一本重要参考资料。Spring Cloud作为目前最流行的微服务框架之一,它提供了构建分布式系统所需的多种工具和服务,包括...
深入理解spring cloud与微服务构建 pdf高清完整版
06-04
深入理解spring cloud与微服务构建 pdf高清完整版下载 带目录
深入理解SpringCloud与微服务构建》_sample.pdf
08-15
深入理解SpringCloud与微服务构建》_sample.pdf 《深入理解SpringCloud与微服务构建》_sample.pdf 《深入理解SpringCloud与微服务构建》_sample.pdf 《深入理解SpringCloud与微服务构建》_sample.pdf
深入理解Spring Cloud与微服务构建》word版本
11-20
深入理解Spring Cloud与微服务构建》是一本专注于讲解如何使用Spring Cloud构建高效、可靠的微服务系统的书籍。Spring Cloud作为目前最流行的微服务框架之一,它提供了大量的工具和服务,帮助开发者快速搭建分布式...
spring 深入理解
G_whang的博客
01-05 358
1.spring依赖注入是在什么时候完成的 是在初始化bean的时候完成的,bean的初始化过程,也叫bean的生命周期 2.spring bean的生命周期到底在那个步骤完成的依赖注入? spring bean 的产生过程 3.bean是有什么产生来的 常规java类 Class------object(bean) spring bean的话 Class-----beanDefinition--...
深入理解Spring(一)
weixin_46036165的博客
06-07 249
深入理解Spring之IOC 1.IOC推导理解 a.使用IOC之前的实现方式 dao层实现代码 // UserDao.class package dao; public interface UserDao { void getUser(); } // UserDaoImpl.class package dao; public class UserDaoImpl implements UserDao { public void getUser() { Syste
Spring深入理解-Spring框架设计理念
初学者
06-22 1754
导语   Spring框架作为企业最常用的框架,是为了降低企业级开发的复杂性,现在经过发展它可以做的事情也是越来越多了。但是尽管Spring家族的东西已经越来越多,越来越健全,但是它的核心理念是不变的。最终的目的都是简化开发。很多语言框架的出现都是为了简化开发,而Spring 的出现就是为了简化Java开发。 文章目录Spring设计初衷 Spring设计初衷   Spring框架在企业级开发的框架简化上已经做到了极致,地位也是定位简化Java开发,为了简化Java开发实现了如下的4个关键策略。 1.
深入理解Spring
WN0813的博客
08-06 187
Spring两大核心:IoC、AOP IoC(Inversion of Control):控制反转,别名依赖注入 IoC Service Provider会把相应的被依赖对象注入到被注入对象,达到IoC Service Provider为被注入对象服务的目的,控制也从被注入对象转移至IoC Service Provider 三种依赖注入的方式:构造方法注入、setter方法注入、接口注入 构造方法注入:被注入对象可以通过在其构造方法声明依赖对象的参数列表,让IoC容器知道需要哪些依赖对象
写文章

热门文章

  • React的componentWillReceiveProps(nextProps)生命周期使用详解 56086
  • Oracle列转行函数LISTAGG() WITHIN GROUP ()的使用方法 49580
  • 物联网MQTT协议详解 49354
  • ES与MySQL数据同步(全量与增量) 35497
  • 阿里巴巴开发规范 21591

分类专栏

  • Java 24篇
  • 大数据 1篇
  • SSM 8篇
  • Redis 8篇
  • JVM 9篇
  • kafka 8篇
  • RabbitMQ 4篇
  • Hadoop 10篇
  • Spark 4篇
  • MongoDB 1篇
  • 问题排查 6篇
  • 多线程 10篇
  • MySQL 12篇
  • SpringCloud 15篇
  • Elasticsearch 5篇
  • Dubbo 5篇
  • SQL 10篇
  • Linux 6篇
  • React 13篇
  • 分布式 10篇
  • 项目实战 24篇
  • 面试经历 1篇
  • 网络编程 6篇
  • 设计模式 10篇
  • 基础前端 3篇

最新评论

  • Git版本控制常用命令

    CSDN-Ada助手: 哇, 你的文章质量真不错,值得学习!不过这么高质量的文章, 还值得进一步提升, 以下的改进点你可以参考下: (1)使用更多的站内链接;(2)增加除了各种控件外,文章正文的字数;(3)提升标题与正文的相关性。

  • 深入理解TCP/IP

    CSDN-Ada助手: TCP/IP 是什么协议?它的作用是什么?

  • 深入理解Elasticsearch:CRUD过程原理

    CSDN-Ada助手: 哇, 你的文章质量真不错,值得学习!不过这么高质量的文章, 还值得进一步提升, 以下的改进点你可以参考下: (1)提升标题与正文的相关性;(2)使用更多的站内链接;(3)增加除了各种控件外,文章正文的字数。

  • 深入理解MySQL:性能优化1

    CSDN-Ada助手: 哇, 你的文章质量真不错,值得学习!不过这么高质量的文章, 还值得进一步提升, 以下的改进点你可以参考下: (1)提升标题与正文的相关性;(2)使用更多的站内链接。

  • 深入理解Spark

    CSDN-Ada助手: Spark SQL 和 Hive 的比较,它们各自的优点和适用场景是什么?

最新文章

  • postgresql执行模糊批量删除表
  • postgis函数汇总
  • Mockito单元测试详解
2023年1篇
2022年7篇
2021年16篇
2020年94篇
2019年84篇
2018年27篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家玻璃钢园林雕塑定制玻璃钢大型雕塑公园玻璃钢大象雕塑玻璃钢浮雕校园玻璃钢雕塑厂家郑州环保玻璃钢雕塑定制南京抽象玻璃钢雕塑哪家便宜广场玻璃钢雕塑推荐货源革命主题玻璃钢雕塑哪里买玻璃钢卡通雕塑厂家青海玻璃钢雕塑安装公司汉中玻璃钢雕塑制作厂家广东卡通玻璃钢动物马雕塑晋城铸造校园玻璃钢景观雕塑军号雕塑玻璃钢公司阳泉玻璃钢广场雕塑厂家金华抽象玻璃钢雕塑生产厂家福建商场主题创意商业美陈思路玻璃钢雕塑产品厂家贵不贵四川玻璃钢雕塑制造吉林公园玻璃钢雕塑方法商场美陈气球文字孝感玻璃钢雕塑定制怎么自制玻璃钢花盆江西动物玻璃钢雕塑多少钱玻璃钢美陈雕塑制作云南高质量玻璃钢雕塑销售电话宣城创意玻璃钢雕塑定做价格湖北公园玻璃钢雕塑安装许昌火烈鸟玻璃钢雕塑生产厂家武汉景区玻璃钢雕塑厂家香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化