面试题:你简历中写到熟悉Spring源码,那你给我说说它用到了那些设计模式?...

《Spring》源码学习指南:有时候不是你笨!掌握正确的学习方法很重要。 因为不断有朋友,或留言,或私信,问我Spring源码阅读问题。我本有心回答,但奈何这是一个非三言两语能说清出的事。所以就决定写一篇小文,来分享下我的浅薄经验。 因为Spring的源代码量非常大。如果像阅读小说一样,一行不拉的读,是不现实的。所以,现实,而且有用的做法,是只阅读核心代码。 至于其他边支代码,如果通读,一则不现实,二则没有必要。 但因为Spring复杂,且设计精妙。初学者刚开始阅读,必然会面比较茫然,不知从那里入手。而我的做法,有一下几个关键点: 1.先掌握Spring的基本用法。 在阅读Spr 阅读详情
13894260-032cf51580eb83cc.jpg
timg (1).jpg

Spring作为业界的经典框架,无论是在架构设计方面,还是在代码编写方面,都堪称行内典范。好了,话不多说,开始今天的内容。

spring中常用的设计模式达到九种。

# 模板方法(Template Method)

spring的jdbc模板,对Spring源码的精妙真是佩服得五体投地,极为经典。

spring中真是集设计模式之大成,而且用得是炉火纯青。模板方法(template method)就在spring中被大量使用,如:jdbcTemplate,hibernateTemplate,JndiTemplate以及一些包围的包装等都无疑使用了模板模式,但spring并不是单纯使用了模板方法,而是在此基础上做了创新,配合callback(回调)一起使用,用得极其灵活。

所谓模板板式,就是在父类中定义算法的主要流程,而把一些个性化的步骤延迟到子类中去实现,父类始终控制着整个流程的主动权,子类只是辅助父类实现某些可定制的步骤。

所谓回调,就是方法参数中传递一个接口,父类在调用此方法时,必须调用方法中传递的接口的实现类。

以下是一个具体的例子,JdbcTemplate中的execute方法。

13894260-1d992fd845a4ad1d.png
111.png
13894260-9b329199a3e3570a.png
222.png

上面所述仅仅是Spring JdbcTemplte实现的基本原理,Spring JdbcTemplate内部还做了更多的事情,比如,把所有的基本操作都封装到JdbcOperations接口内,以及采用JdbcAccessor来管理DataSource和转换异常等。

# 策略(Strategy)

策略模式是对算法的包装,把使用算法的责任和算法本身分隔开,委派给不同的对象管理。策略模式通常把一系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。

spring中在实例化对象的时候用到Strategy模式,在SimpleInstantiationStrategy中有如下代码说明了策略模式的使用情况。

13894260-f48c89b9a09b7686.png
333.png

# 简单工厂

又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。

简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。

spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。如下配置,就是在 HelloItxxz 类中创建一个 itxxzBean。

<beans>

# 工厂方法(Factory Method)

通常由应用程序直接使用new创建新的对象,为了将对象的创建和使用相分离,采用工厂模式,即应用程序将对象的创建及初始化职责交给工厂对象。

一般情况下,应用程序有自己的工厂对象来创建bean.如果将应用程序自己的工厂对象交给Spring管理,那么Spring管理的就不是普通的bean,而是工厂Bean。

就以工厂方法中的静态方法为例讲解一下。

import java.util.Random;

建一个config.xm配置文件,将其纳入Spring容器来管理,需要通过factory-method指定静态方法名称。

<bean id="random"

测试:

public static void main(String[] args) {

# 单例模式(Singleton)

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

spring中的单例模式完成了后半句话,即提供了全局的访问点BeanFactory。但没有从构造器级别去控制单例,这是因为spring管理的是是任意的java对象。

核心提示点:Spring下默认的bean均为singleton,可以通过singleton=“true|false” 或者 scope=“?”来指定。

# 适配器(Adapter)

在Spring的Aop中,使用的Advice(通知)来增强被代理类的功能。

Spring实现这一AOP功能的原理就使用代理模式。

1、JDK动态代理。

2、CGLib字节码生成技术代理。

对类进行方法级别的切面增强,即,生成被代理类的代理类, 并在代理类的方法前,设置拦截器,通过执行拦截器重的内容增强了代理方法的功能,实现的面向切面编程。

public interface AdvisorAdapter {
class MethodBeforeAdviceAdapter implements AdvisorAdapter, Serializable {

# 代理(Proxy)

为其他对象提供一种代理以控制对这个对象的访问。

从结构上来看和Decorator模式类似,但Proxy是控制,更像是一种对功能的限制,而Decorator是增加职责。

spring的Proxy模式在aop中有体现,比如JdkDynamicAopProxy和Cglib2AopProxy。

# 装饰模式(Decorator)

也叫包装器模式(Wrapper)。GOF在《设计模式》一书中给出的定义为:动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。

在我们的项目中遇到这样一个问题:我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。

这里,你会首先想到得是在spring的applicationContext中配置所有的dataSource。这些dataSource可能是各种不同类型的,比如不同的数据库:Oracle、SQL Server、MySQL等,也可能是不同的数据源:比如apache 提供的org.apache.commons.dbcp.BasicDataSource、spring提供的org.springframework.jndi.JndiObjectFactoryBean等。然后sessionFactory根据客户的每次请求,将dataSource属性设置成不同的数据源,以到达切换数据源的目的。

Spring中用到的包装器模式在类名上有两种表现:一种是类名中含有Wrapper,另一种是类名中含有Decorator。基本上都是动态地给一个对象添加一些额外的职责。

# 观察者(Observer)

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

spring中Observer模式常用的地方是listener的实现。如ApplicationListener。


看到这里还没过瘾,那么就来群里与更多的同学交流切磋技术,戳这里:咱们来一起抱团取暖,好吗?【Java高级互联网架构:964357187】

13894260-429927e6e02f83f1.jpeg
qvarfz39px.jpeg
Spring常见面试题及知识点总结 1.你对Spring框架的理解,Spring框架有哪些模块? Spring是一个轻量级的IoC和AOP容器框架,是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。 Spring,一种用来简化企业应用级开发的一种开源框架。 简化开发:它对常用的API做了封装,比如对JDBC的封装,使用Spring JDBC访问数据库,就不需要考虑如何获取连接和关闭的问题。 解耦:Spring帮我们管理软件之间的依赖关系,这样对象之间的耦合性就降低了,这样的维护性 阅读详情

相关推荐

SpringBoot面试题 30道.pdf

面试题

啃spring源码之设计模式的运用

菜鸟阅读源码第一更...写文章还不熟练

qq_33677796的博客 197

Ollama本地大模型部署指南:从核心原理到实战避坑

大语言模型(LLM)作为人工智能领域的核心技术,通过海量数据训练获得强大的语言理解和生成能力。其工作原理基于Transformer架构,通过自注意力机制处理序列数据,在文本生成、代码编写和对话系统等场景展现出巨大价值。随着开源模型的普及,本地部署成为关注焦点,它解决了数据隐私和定制化需求,但面临环境配置和资源管理的挑战。Ollama作为开源工具,通过封装模型格式和统一API,简化了本地部署流程,支持GPU加速和性能调优,让开发者能够快速集成到IDE和自动化脚本中,实现高效的本地AI应用部署。

weixin_30915951的博客 453

spring源码中设计模式的使用

springboot 源码中使用了很多设计模式,本文通过实例来介绍下设计模式在 springboot 中的应用 模板方法模式 模板方法模式指的是,父类定义一个方法的骨架,主方法中的子方法在父类中可以不作具体实现,而是由子类来完成。 以大名鼎鼎的AbstractApplicationContext 中的 refresh() 方法为例,它就是一个模板方法,定义了方法的骨架,但是里面有的子方法没有在 AbstractApplicationContext 具体实现,而是交给了子类来实现。比如postPro..

修理男爵的博客 956

【GESP】C++四级考试大纲知识点梳理, (10) 文件读写和重定向

其实,由于本人也是边学、边实验、边总结,且对考纲深度和广度的把握属于个人理解。因此本文更多的不是一个教程,而是个人知识梳理,如有遗漏、疏忽,欢迎指正、交流。孩子放假,出游一周,没有更新。刚刚归来,继续学习。GESP C++四级官方考试大纲中,共有11条考点,本文针对第10条考点进行分析介绍。(10)掌握文件操作中的重定向,实现文件读写操作,了解文本文件的分类,掌握写操作、读操作、读写操作。GESP C++四级官方考试大纲中,共有11条考点,本文针对第10条考点进行分析介绍。孩子放假,出游一周,没有更新。

CoderCoding的博客 526

信号编辑软件ZX/SignalEditing

信号编辑软件ZX/SignalEditing

weixin_45661395的博客 963

Spring源码剖析设计模式

目录1 观察者模式1.1 Spring观察者模式1.2 ApplicationContext事件监听1.3 自定义监听事件2 Spring AOP-动态代理3 BeanFactory工厂模式4 适配器模式4.1 Spring Aop适配器+代理模式案例4.2 Spring AOP适配器体系 1 观察者模式 基础知识: Java常用设计模式 定义: 对象之间存在一对多或者一对一依赖,当一个对象改变状态,依赖它的对象会收到通知并自动更新。 MQ其实就属于一种观察者模式,发布者发布信息,订阅者获取信息,订阅了

赵广陆 1373

智能座舱架构与芯片- (9) 音频篇 上

从A2B收发器衍生出来的简化产品具备各种级别的功能,例如端点从节点(不支持TDM)、简化型主节点(支持较短的电缆和更少的从节点数量),以及简化型端点从节点(支持较短电缆和更少的PDM输入)。例如,AVB中的talker和listener是不同的设备,它们的参考时钟源可能并不相同。传统的车载收音机通过天线接收无线电信号,然后由调谐模块(Tuner)进行信号调谐,信道过滤,信道均衡,多路改善,信号解调等,转为数字信号后再交给DSP进行立体声解码,噪声抑制,弱信号处理,最后从车载音响系统进行播放。

joanna_xiao的博客 4910

Spring——Spring设计模式总结

设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬境地,也不是我们时常忘记,只是一直没有记忆。Spring作为业界的经典框架,无论是在架构设计方面,还是在代码编写方面,都堪称行内典范。spring中常用的设计模式达到九种,我们举例说明。以后再也不怕面试官问我:Spring中用了哪些设计模式了。

庄小焱 4439

CoppeliaSim学习笔记(1):建立Python脚本与CoppeliaSim的连接

CoppeliaSim学习笔记,建立python和CoppeliaSim的连接,实现联调。

qq_22487889的博客 1万+

手把手拆解固态电池成本:2030年真能比液态电池便宜30%吗?

本文深度解析固态电池成本结构,探讨2030年实现比液态电池便宜30%的可行性路径。通过拆解正极材料、负极材料和固态电解质的成本演变,分析关键技术对降本的影响,并预测产业链协同效应下的成本优化趋势。文章指出,在材料创新、设备国产化和政策支持等多重因素推动下,固态电池有望在2030年实现显著降本目标。

kite3的博客 405

Java设计模式结合Spring源码案例(一)|策略模式+工厂模式

JAVA设计模式 spring源码案例 策略模式 工厂模式

许道杰的博客 928

VCS HVP与验证计划planner:数字IC验证环境搭建与收敛实践

在数字IC验证中,VCS 是广泛使用的编译型仿真器,HVP 通常指面向硬件验证平台的高性能编译选项集,用于开启 SystemVerilog 类、随机约束和 NTB 等能力;planner 则指验证计划管理,核心是把功能点与测试用例、覆盖点建立映射。理解 VCS 先编译后仿真的原理,有助于优化增量编译、调试访问和覆盖率采集,提升回归收敛效率。规划驱动让激励不再散落,设计改版时能快速定位受影响用例,交接和覆盖率收敛更有依据。无论是 UVM 环境搭建、编译参数选择,还是验证计划表维护,都需要把工具选项与规划方法结

weixin_42543046的博客 342

面试题:你简历中写到熟悉Spring源码,那你给我说说它用到了那些设计模式?

Spring作为业界的经典框架,无论是在架构设计方面,还是在代码编写方面,都堪称行内典范。好了,话不多说,开始今天的内容。 spring中常用的设计模式达到九种。 模板方法(Template Method) spring的jdbc模板,对Spring源码的精妙真是佩服得五体投地,极为经典。 spring中真是集设计模式之大成,而且用得是炉火纯青。模板方法(template method)就在sp...

我是月亮呀的博客 3424

ESP32设备驱动-VCNL4040趋近传感器

VCNL4040 将趋近传感器 (PS)、环境光传感器 (ALS) 和高功率 IRED 集成到一个小型封装中。它通过CMOS工艺将光电二极管、放大器和模数转换电路集成到一个芯片中。

视觉与物联智能 943

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

面试有没有看过spring源码_面试题:你简历中写到熟悉Spring源码,那你给我说说它用到了那些设计模式?...

前语:不要为了读文章而读文章,一定要带着问题来读文章,勤思考。在此,建议大家为本公众号加“星标”。如文章写得好,望大家阅读后在右下边“在看”处点个赞,以示鼓励!来源:http://t.cn/E9GCYFPSpring作为业界的经典框架,无论是在架构设计方面,还是在代码编写方面,都堪称行内典范。好了,话不多说,开始今天的内容。spring中常用的设计模式达到九种。# 模板方法(Templa...

weixin_28759725的博客 435

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

面试官:你背了几道面试题就敢说熟悉Java源码?对不起,我们不招连源码都不会看的人

你看源码么? 你会看源码么? 你从源码中有收获么?

Baldwin_KeepMind 4万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

设计模式面试题_面试题:你简历写到熟悉Spring源码,你到底用到了哪些设计模式?...

Spring作为业界的经典框架,无论是在架构设计方面,还是在代码编写方面,都堪称行内典范。好了,话不多说,开始今天的内容。spring中常用的设计模式达到九种。模板方法(Template Method)spring的jdbc模板,对Spring源码的精妙真是佩服得五体投地,极为经典。spring中真是集设计模式之大成,而且用得是炉火纯青。模板方法(template method)就在spring中...

weixin_39833763的博客 230

工作两年简历写成这样,谁要你呀!

作者:小傅哥 博客:https://bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获! 一、前言 最近有伙伴问小傅哥,我的简历怎么投递了都没有反应,心里慌的很呀。 工作两年了目前的公司没有什么大项目,整天的维护别人的代码,有坑也不让重构,都烦死了。荒废我一身技能无处施展,投递的简历也没人看。我是不动物园里的猩猩,狒狒了! 我要加班,我要996,我要疯狂编码,求给我个机会… ...

bugstack虫洞栈 4万+

JAVA设计模式第七讲:设计模式在 Spring 源码中的应用

设计模式(design pattern)是对软件设计中普遍存在的各种问题,所提出的解决方案。本文以面试题作为切入点,介绍了设计模式的常见问题。我们需要掌握各种设计模式的原理、实现、设计意图和应用场景,搞清楚能解决什么问题。本文是第七篇:设计模式在 Spring 源码中的应用。

Jet_qi的博客 906

Spring用到了哪些设计模式?

????这是一个或许对你有用的社群????一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料:《项目实战(视频)》:从书中学,往事上“练”《互联网高频面试题》:面朝简历学习,春暖花开《架构 x 系统设计》:摧枯拉朽,掌控面试高频场景题《精进 Java 学习指南》:系统学习,互联网主流技术栈《必读 Java 源码专栏》:知其然,知其所以然????这是一个或许...

芋艿V 113

Spring中用到的设计模式,你知道几个?

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!return getSingleton(beanName,true);}protected Object getSingleton(String beanName, boolean allowEarlyReference) {//检查缓存中是否存在实例Object singletonObject = this.singletonObjects.get(beanName);if (singletonObject

2401_84093248的博客 677

Spring中使用到的设计模式及其源码分析

众所周知,Spring框架是一个强大而灵活的开发框架。这不,上次的面试刚问到这些,没防住!!!因此下来总结一下。这篇文章主要介绍Spring中使用到的设计模式,自己做个面试复盘,同时希望能帮助到其他小伙伴儿们。

小威的博客 1万+

来自读者的面试题:谈谈Spring用到了哪些设计模式?

前言前几天,一位读者面阿里被问到一个问题:Spring框架用到了哪些设计模式?,答的不是很好,于是打算写篇文章讲讲这个!代理模式所谓代理,是指它与被代理对象实现了相同的接口,客户端必须通过...

Java知音 378
上一篇: 程序员神级跳槽指南!哪些时候该跳槽?跳槽后如何好到好工作?
下一篇: 互联网薪资“高开低走”,“码农or架构师”,你的能力是否真的可以匹配高薪?...
普通网友
博客等级 码龄8年 342粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值