spring框架中用到了哪些设计模式

1、工厂模式

        spring的core模块最主要的功能就是提供了ioc容器,ioc容器就是工厂模式的实现,ioc容器读取我们对于bean的定义与配置,使用工厂模式,依赖java的反射机制去创建bean实例,执行bean的装配。

2、单例模式

        单例模式限制某个类在内存中只会创建出一个这个类的对象,永远不会有第二个对象创建出来,spring容器创建的bean默认都是单例的,spring bean支持的作用域有singleton、prototype、request、session、global session,我们可以通过在xml配置文件中设置<bean>标签的scope属性、或者是在使用了@Controller、@Service、@Repository、@Component注解的类上添加@Scope注解来定义bean的作用域。

3、代理模式

        什么是代理模式?

        有的时候为了限制对于某个类的对象的访问,我们要去创建一个代理类,将直接访问委托类的方式,改为访问代理类,在代理类内部去访问委托类,我们可以在代理类内部对委托类添加一些增强的业务逻辑,这便是代理模式。

        代理模式分为静态代理和动态代理,静态代理与动态代理的区别在于代理类的创建时机,静态代理的代理类是由我们手动创建的,所以代理类的类型在编译期就确定了,所以静态代理又称为编译期增强;动态代理的代理类是在程序的运行期间生成的,代理类的类型要到运行期间才能确定,所以动态代理又称为运行时增强。

        动态代理有jdk动态代理和cdlib动态代理两种实现,spring aop就是由动态代理实现的,它默认使用jdk动态代理,但是jdk动态代理有个前提是,委托类必须实现了接口,如果委托类没有实现任何接口的话,就只能用cglib代理了。

        spring aop:

        aop是面向切面编程,是oop面向对象编程的补充,aop是将封装好的不同的对象横切开来,抽取出它们共同的功能去实现为一个切面,为这个切面定义切入点和通知逻辑,再将这个切面的通知织入到目标对象的连接点上。使用aop能将那些与业务无关却被各个业务模块所共同调用的部分做统一的实现和管理,实现了业务逻辑和基本支持服务的解耦,并且提高了代码的复用性和可维护性。我们可以用aop来实现登录校验、鉴权、记录日志等功能,spring还用aop实现了声明式事务管理。spring的aop模块支持spring aop和Aspectj aop。

        Aspectj是一个aop框架,Aspectj aop定义了aop语法,扩展了java语言,它使用专用的编译器来生成遵循java字节编码规范的class文件,它是用静态代理实现的,它提供了一组注解,使用这一组注解能够让编译器在编译期间将切面定义的通知代码织入到连接点对应的方法前后,来实现方法的增强。

        spring aop的核心功能是使用jdk动态代理和cglib动态代理实现的,用jdk动态代理创建的代理类会与委托类实现同样的接口,并自动继承Proxy类,它会自动创建代理对象,拦截目标对象方法的执行,将通知织入到目标对象的连接点上,为目标方法实现业务增强。spring aop借鉴了Aspectj 的注解驱动aop的方式,在类上加@Aspect注解就能够定义切面【当然还要引入Aspectj的炸包:aspectjweaver.jar】,但spring aop只是使用了AspectJ的注解功能,核心功能还是用jdk动态代理和cglib动态代理实现的。

        

4、模板方法模式

        spring框架提供的JdbcTemplate、RestTemplate、TransactionTemplate等用Template命名的类都是模板方法模式的实现,如JdbcTemplate内部封装了jdbc操作,提供了方便易用的api来实现数据库操作。

5、适配器模式

        什么是适配器模式:
        有的时候我们想使用某个类,但是这个类的接口又不符合我们的需求,这时就需要创建一个适配器类,在这个适配器类中提供一个符合需求的接口,并在这个接口中调用被适配类的接口,来让被适配类符合我们的需求。

        适配器模式分为对象适配器和类适配器两种,它俩的区别是适配器类和被适配类的关系,对象适配器中,它俩是引用关系,在适配器类中有被适配类的引用;类适配器中,它俩是继承关系,适配器类继承被适配类。对象适配器模式更常用,因为java是单继承,类适配器模式中,适配器类继承了被适配类就无法再继承其他类了。

        spring mvc中的HandlerAdapter就是适配器模式的实现。在处理请求的时候,DispacherServlet会去调用HandlerAdapter,让HandlerAdapter去执行相应的Controller的方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522081.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据科学家实操之路

摘要&#xff1a; Kaggle最近进行了一项旨在评估数据科学和机器学习当前发展状况的调查。 他们收到了将近17000份答卷&#xff0c;并利用这些答卷做出了大量的分析。Kaggle最近进行了一项旨在评估数据科学和机器学习当前发展状况的调查。 他们收到了将近17000份答卷&#xff0c…

快报:Java跌惨!Python背后或有推手?网友:心态已崩!

“愿你出走半生&#xff0c;归来仍学Python&#xff01;”最近Python的slogan正在“变化”。原因是来自于PYPL官方发布2019年7月编程语言指数榜&#xff0c;Python连续半年夺冠&#xff0c;并且本月市场份额超高的28.08%。这简直是遇神杀神&#xff0c;遇佛杀佛的灭霸节奏&…

mybatis源码深度解析_30天消化MyBatis源码解析笔记,吊打面试官,offer接到手软

MyBatis 是一个优秀的 Java 持久化框架&#xff0c;SSM 框架组合(Spring SpringMVC Mybatis)&#xff0c;依赖 MyBatis 搭建的项目更是数不胜数&#xff0c;在互联网公司的使用中&#xff0c;占据了大片江山&#xff0c;你在使用 MyBatis 吗&#xff1f;会使用你真的了解 MyB…

从司法领域看阿里云产业AI策略:生态联盟,技术赋能

摘要&#xff1a; 在日前结束的云栖大会深圳峰会上&#xff0c;除了阿里云全面进军IoT的战略宣布之外&#xff0c;持续不断的生态签约成了另一大亮点&#xff1a;全天的IoT合伙作伴签约&#xff0c;围绕“ET大脑”的千里马计划&#xff0c;以及司法领域重要IT服务商通达海的合作…

word表格怎么缩小上下间距_如何缩小word表格中的行距

自己绘制表格&#xff0c;然后在表格属性里可以设置www.51dongshi.com防采集。word行距缩小的方法&#xff1a;本次操作以Dell电脑为例&#xff0c;具体操作步骤如下&#xff1a;产品名称&#xff1a;Dell产品型号&#xff1a;Dell 灵越5000系统版本&#xff1a;Windows 10软件…

全球云端数据仓库领导者 MaxCompute 将于本月10日正式开服美东节点

摘要&#xff1a; 作为全球云端数据仓库的领导者&#xff0c;阿里云MaxCompute为满足更多客户的业务需求&#xff0c;不断加快全球化部署的节奏。本月10日&#xff0c;美东&#xff08;弗吉尼亚&#xff09;节点会正式上线。届时&#xff0c;将会以最新版本产品向用户提供大数据…

给面试官讲明白:一致性Hash的原理和实践

戳蓝字“CSDN云计算”关注我们哦&#xff01;来源 | 靳刚同学作者 | 靳刚“一致性hash的设计初衷是解决分布式缓存问题&#xff0c;它不仅能起到hash作用&#xff0c;还可以在服务器宕机时&#xff0c;尽量少地迁移数据。因此被广泛用于状态服务的路由功能”01—分布式系统的路…

python读取excel列数据库_python中读取excel数据库

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航&#xff0c;为用户…

mysql如何逻辑删除_mysql逻辑删除如何恢复

在项目中&#xff0c;一般会遇到这种情况&#xff1a;逻辑删除以及多关联不删除逻辑删除(软删除)&#xff1a;逻辑删除就是对要被删除的数据打上一个删除标记&#xff0c;通常使用一个is_deleted字段标示行记录是不是被删除(或者使用一个status字段代表所谓的“删除”状态)&…

手把手,教你用MaxCompute+OpenSearch搭建分布式搜索引擎

摘要&#xff1a; 最近&#xff0c;经常有客户咨询如何低成本搭建高性能的海量数据搜索引擎&#xff0c;比如实现公众号检索、影讯检索等等。由于客户的数据在阿里云上&#xff0c;所以希望找到云上解决方案。笔者开始调研一些云上产品&#xff0c;很多人向我推荐了OpenSearch&…

再获绿色等级5A称号!揭开腾讯数据中心节能环保黑科技

9月3日北京&#xff0c;腾讯目前位于深圳最大的数据中心&#xff0c;“腾讯光明中国移动|万国数据数据中心二期”荣获运行5A绿色数据中心称号&#xff0c;达到了“数据中心绿色等级评估”的最高等级。该数据中心绿色分级评估由ODCC联合中国信通院、绿色网格TGGC发起&#xff0c…

MaxCompute_2_MaxCompute数据迁移文档

摘要&#xff1a; 乍一看标题会以为是不是作者写错了怎么会有从MaxCompute到MaxCompute迁移数据的场景呢在实际使用中已经有客户遇到了这种场景比如两个网络互通的专有云环境之间数据迁移、公共云数加DataIDE上两个云账号之间数据迁移、还有网络不通的两个MaxCompute项目数据迁…

printf 指针地址_指针搞都不懂,好意思说自己会C语言?

C语言面试必问知识点之「指针」一、指针相关概念指针与地址我们使用的计算机&#xff0c;系统为了更好地管理我们的内存&#xff0c;就为内存区的每一个字节都分配一个唯一编号&#xff0c;这就是“地址”。指针的实质就是地址&#xff0c;就是这一个个编号。指针变量变量在编译…

mysql 前端proxy_mysql-proxy中间件使用

下载安装mysql_proxy:解压后,该目录包含已经编译好的二进制文件.可以通过mysql-proxy --help查看帮助1: 利用mysql_proxy实现负载均衡执行mysql_proxy./mysql-proxy-path/bin/mysql-proxy \--proxy-backend-addresses192.168.1.199:3306 \--proxy-backend-addresses192.168.1.2…

开启数据科学职业生涯的8个基本技巧

摘要&#xff1a; 本文为数据科学家开创数据科学事业铺平了道路。只要按照这八个小贴士来做&#xff0c;你就能让自己的职业生涯有一个良好的开端。Nick Bostrom&#xff08;译者注&#xff1a;Nick Bostrom是牛津大学哲学系的教授&#xff0c;是人类未来研究院的创始人和主任。…

WIAC上,华为展区都有点儿啥?

戳蓝字“CSDN云计算”关注我们哦&#xff01;谈及计算产业的变迁&#xff0c;我们了解到其先后经历了大型计算机、小型机/x86服务器阶段&#xff0c;并同时开创了敏捷、创新、体验好、省成本的Cloud 1.0以及Cloud 2.0时代&#xff0c;在云计算、5G与AI等创新技术不断叠加发展的…

【技术系列】浅谈GPU虚拟化技术(第一章)

摘要&#xff1a; GPU深度好文系列&#xff0c;阿里云技术专家分享 第一章 GPU虚拟化发展史 GPU的虚拟化发展历程事实上与公有云市场和云计算应用场景的普及息息相关。如果在10年前谈起云计算&#xff0c;大部分人的反应是“不知所云“。但是随着云计算场景的普及&#xff0c;概…

检测到目标FTP服务可匿名访问

漏洞名称&#xff1a;检测到目标FTP服务可匿名访问 解决方案&#xff1a;关闭FTP服务可匿名访问 具体操作步骤如下 #编辑 vim /etc/vsftpd/vsftpd.conf #修改 anonymous_enableYES 为 NO #保存退出 #重起服务 /etc/init.d/vsftpd restart 生效漏洞1参考连接&#xff1a; htt…

pythonpygame中主函数_从0开始学Python-14.2 pygame的核心对象

Surface Objects(平面对象) 和窗口Surfaceobjects代表了一个巨型的2D图像&#xff0c;这个2D图像上的点可以通过pygame的drawing函数来更改并展示到屏幕上。pygame上的大多数控件都是Surfaceobjects。但是游戏的外边框、标题栏、按钮不是Surfaceobjects。尤其是&#xff0c;pyg…

php如何删除数据mysql数据库_php如何删除数据库

php如何删除数据库1、首先查看有哪些数据库2、使用php删除test2<?php $dbhost localhost; // mysql服务器主机地址$dbuser root; // mysql用户名$dbpass root; // mysql用户名密码$conn mysqli_connect($dbhost, $dbuser, $dbpass);if(! $conn ){die(连接失败: . mysq…