Sping框架 动态代理 AOP

动态代理是实现AOP的一种方式,它可以动态生成代理对象以增强目标对象的功能,如添加事务控制、权限判断、日志记录等。Java中的动态代理分为基于接口和基于类的实现,使用Proxy和InvocationHandler。AOP(面向切面编程)是将关注点分离,提高代码复用性和可维护性,SpringAOP是其典型实现,支持前置、后置、异常、环绕等通知类型。
摘要由CSDN通过智能技术生成

动态代理是一种实现 AOP(面向切面编程)的方式,它可以在运行时动态地生成代理对象,从而实现对目标对象的增强。

具体来说,动态代理可以在不修改原有代码的情况下,为目标对象的方法添加前置通知、后置通知、异常通知、环绕通知等横切逻辑。

Java 中的动态代理主要有两种实现方式:基于接口的动态代理和基于类的动态代理。它们都是通过 Java 提供的 java.lang.reflect 包中的 Proxy 类和 InvocationHandler 接口来实现的。

基于接口的动态代理是指在运行时动态地生成一个实现了指定接口的代理类,代理类会实现 InvocationHandler 接口的 invoke 方法,通过反射机制来调用目标对象的方法,并在调用前后添加相应的横切逻辑。

基于接口的动态代理需要目标对象实现一个接口,因此它的适用范围比较有限。 基于类的动态代理是指在运行时动态地生成一个继承了指定类的代理类,代理类同样会实现 InvocationHandler 接口的 invoke 方法,通过反射机制来调用目标对象的方法,并在调用前后添加相应的横切逻辑

。基于类的动态代理不需要目标对象实现接口,因此它的适用范围更广。 动态代理的使用需要定义一个 InvocationHandler 对象,该对象实现 invoke 方法,用于定义目标对象方法的增强逻辑。

然后通过 Proxy 类的 newProxyInstance 方法来生成代理对象,该方法需要传入目标对象的类加载器、目标对象实现的接口(如果是基于接口的动态代理)或目标对象的类(如果是基于类的动态代理)以及 InvocationHandler 对象。

总之,动态代理是一种非常有用的技术,它可以帮助我们实现 AOP 编程,提高程序的可扩展性和可维护性。

 我们可以把这些功能封装成一个增强方法,然后在功能方法中进行调用,但是也出现了方法的十处、一百处的调用操作,一旦增强方法名字改变,就需要完成所有调用处代码的修改。或者有一天不需要这些增强操作

在Java开发中如果一个类中的方法在基本功能之外需要进行功能扩充或者功能增强,如:事务控制、权限判断、日志记录等等操作,此时可以使用动态代理机制。

定义实现接口的子类,实现接口定义的方法,此方法只需要把核心功能实现即可,其他增强的操作可以在代理类中实现。

 

基于子类的CGLib动态代理,可以使用Enhancer类完成直接对某个类进行动态代理。具体操作步骤如下:

  1. 创建被代理的类,并且定义功能方法,只需要完成核心功能即可。

  1. 定义代理类,使用Enhancer创建代理对象,对被代理对象进行方法增强。

 AOP

AOP的相关术语

  • Joinpoint(连接点):

所谓连接点是指那些被拦截到的点。在 spring 中,这些点指的是方法,因为 spring 只支持方法类型的连接点。

  • Pointcut(切入点):

所谓切入点是指我们要对哪些 Joinpoint 进行拦截的定义。

  • Advice(通知/增强):

所谓通知是指拦截到 Joinpoint 之后所要做的事情就是通知。通知的类型:前置通知,后置通知,异常通知,最终通知,环绕通知。

  • Introduction(引介):

引介是一种特殊的通知在不修改类代码的前提下, Introduction 可以在运行期为类动态地添加一些方法或 Field。

  • Target(目标对象):

代理的目标对象。

  • Weaving(织入): 

是指把增强应用到目标对象来创建新的代理对象的过程。spring 采用动态代理织入,而 AspectJ 采用编译期织入和类装载期织入。

  • Proxy(代理):

 一个类被 AOP 织入增强后,就产生一个结果代理类。

  • Aspect(切面):

是切入点和通知(引介)的结合。

AOP,全称为Aspect-Oriented Programming,即面向切面编程。

AOP 是基于 OOP(面向对象编程)的一种编程思想,旨在通过将与业务无关的横切关注点(如日志、事务、权限等)与业务逻辑(如增删改查等)进行分离,从而提高代码的可复用性、可维护性和可扩展性。

在 AOP 中,切面(Aspect)是一个横切关注点的模块化,并将切面织入到业务逻辑中,可以减少代码的重复性、提高代码的可维护性和可扩展性。

它们可以被应用到对象模型的任何位置。切面使用一个称为通知(Advice)的代码片段来描述它们所关注的横切关注点,并定义了一组切点(Pointcut)来确定它们将被应用到哪些对象上。

AOP 的实现方式有很多种,其中比较常见的是使用 Spring AOP 框架,它提供了基于代理机制的 AOP 实现,通过动态代理将切面织入目标对象中实现横切逻辑的调用。

同时,Spring AOP 还支持多种通知类型,如前置通知、后置通知、异常通知、环绕通知等,并提供了可配置的切点表达式语言,方便开发人员灵活地定义切点。

AOP 的主要作用如下:

  1. 代码复用:将多个模块共同的横切关注点抽象出来,作为切面,然后在需要使用这些关注点的模块中引入相应的切面,从而避免了代码的重复编写。
  2. 系统解耦:将横切关注点与业务逻辑分离,避免了它们之间的耦合,从而使系统更加易于维护和扩展。
  3. 简化开发:通过使用 AOP 框架,开发人员可以将横切关注点与业务逻辑的开发分离,从而减少了开发的工作量和复杂度。
  4. 提高系统性能:AOP 可以在程序运行时动态地织入切面,从而实现对系统的运行时性能进行优化。 综上所述,AOP 是一种非常有用的编程思想,它可以帮助我们实现代码的复用、系统的解耦、开发的简化和性能的优化,是现代软件开发中不可或缺的一部分。

代码展示 

框架格式 

增强类:

 创建接口:

 实现接口的方法:

 配置核心文件xml:

 测试方法:

 测试结果:

小新por
关注 关注
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
动态代理
weixin_47216239的博客
08-19 231
1、Java.lang.reflect.Proxy类可以直接生成一个代理对象 Proxy.newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)生成一个代理对象 参数1:ClassLoader loader 代理对象的类加载器 一般使用被代理对象的类加载器 (表名你要用那个类加载器去加载生成的代理类。) 参数2:Class<?>[] interfaces 代理对象的要实现的接口
AOP动态代理
weixin_46075209的博客
04-17 2058
本文主要介绍的是spring的核心功能AOP中的动态代理,分别介绍了CGLIB和JDK的动态代理,希望能对各位小伙伴有帮助
springAop原理分析-动态代理对象创建过程分析
康世行
09-17 1034
Spring AOP 仅支持 Spring bean 的方法执行连接点,因此您可以将切入点视为与Spring bean 上的方法执行相匹配。切入点声明由两部分组成:一个由名称和任何参数组成的签名,以及一个切入点表达式,该表达式准确确定我们感兴趣的方法执行。在 AOP 的@AspectJ注释样式中,切入点签名由常规方法定义提供,切入点表达式通过使用注释进行指示(用作切入点签名的方法必须具有返回类型)。,在这些情况下,您需要建议未在接口上声明的方法,或者需要将代理对象作为具体类型传递给方法。
动态代理AOP
hongto57的专栏
07-17 1390
动态代理 AOP:面向切面编程。
Spring_AOP的实现机制-动态代理
路奇-长弓
06-13 895
Spring_AOP的实现机制-动态代理1 Spring核心之AOP1.1 AOP的概念2 AspectJ 对 AOP 的实现2.1 AspectJ的通知类型2.2 AspectJ的切入点表达式3 静态代理AspectJ 对 AOP 的实现4 AOP的实现机制-动态代理4.1 JDK动态代理4.2 Cglib动态代理5 两种动态代理方式区别 1 Spring核心之AOP 1.1 AOP的概念 Target(目标对象) 代理(Proxy) 切面(Aspect) 连接点(Joinpoint) 切入点(Point
Spring框架+SpringAOP动态代理
最新发布
03-22
### Spring框架+SpringAOP动态代理 #### 一、Spring AOP 动态代理概述 在探讨Spring AOP(Aspect-Oriented Programming,面向切面编程)中的动态代理之前,我们首先简要回顾一下AOP的基本概念。面向切面编程是一种...
springAOP动态代理
09-06
Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点分离,将横切关注点(如日志、事务管理、权限检查等)与核心业务逻辑解耦。AOP的核心概念是切面、通知、连接点、切入点和织入。在...
Spring AOP 动态代理(二)
01-20
Spring AOP 的本质其实就是实现了动态代理,这个和Aspectj不一样,AspectJ 是直接修改你的字节码 完成的 代理模式其实很简单 主要包括 接口+真实的实现类+代理类 在真实类的实例化的时候 使用代理类,所以需要 ...
Spring框架,AOP,Spring整合Mybatis
01-13
总结,Spring框架AOP机制,尤其是动态代理中的JDK和CGLIB,为我们的代码带来了更高的可维护性和可扩展性。同时,Spring整合Mybatis让开发者可以更专注于业务逻辑,而不是繁琐的数据库操作。了解并熟练掌握这些知识...
Spring AOP动态代理
12-22
Spring AOP(面向切面编程)是Spring框架中的一个重要组件,它允许开发者将关注点分离,将横切关注点(如事务管理、日志记录、性能监控)与核心业务逻辑解耦。AOP通过切面(Aspect)的概念,将这些横切关注点封装成...
SpringAOP代理模式
长安不及十里的博客
08-03 5069
关于两者之间的性能的话,网上有人对于不通版本的jdk进行测试,经过多次试验,测试结果大致是这样的,在1.6和1.7的时候,JDK动态代理的速度要比CGLib动态代理的速度要慢,但是并没有教科书上的10倍差距,在JDK1.8的时候,JDK动态代理的速度已经比CGLib动态代理的速度快很多了,但是JDK动态代理和CGLIB动态代理的适用场景还是不一样的哈!动态代理生成的代理类通常是在运行时通过字节码生成技术生成的,因此在创建代理对象时,需要一个 ClassLoader 来加载这个新生成的代理类。
切面编程的艺术:Spring动态代理解析与实战
学而时习之,不亦说乎?温故而知新,可以为师矣!
01-04 5759
Spring中的动态代理是实现AOP(面向切面编程)的重要组成部分,本文将深入解析动态代理的原理与应用。我们将详细介绍Spring中的两种动态代理实现方式:JDK动态代理和CGLIB动态代理,并讨论它们的优缺点。文章还会提供实用的示例,演示如何使用动态代理来实现横切关注点,例如日志记录、性能监控等。
Spring-Aop动态代理controller)-bug
weixin_34174132的博客
10-26 454
为什么80%的码农都做不了架构师?>>> ...
Proxy-代理模式(转载 动态生成代理对象那块挺有意思)
正走向大牛的菜鸟
11-25 203
Java动态代理模式 1. 代理:一个角色代表别一个角色来完成某些特定的功能。 比如:生产商,中间商,客户这三者这间的关系 客户买产品并不直接与生产商打交道,也不用知道产品是如何产生的,客户只与中间商打交道,而中间商就可以对产品进行一些包装,提供一些售后的服务。 代理模式有三个角色: 1. 抽象主题角色 2. 代理主题角色 3. 实际被代理角色 其它类通过访问代理主题角色来访问实际被代理角色。...
Spring AOP原理之动态代理
热门推荐
Tyshawn的博客
12-29 5万+
什么是代理? 指为一个目标对象提供一个代理对象, 并由代理对象控制对目标对象的引用. 使用代理对象, 是为了在不修改目标对象的基础上, 增强目标对象的业务逻辑. 静态代理 静态代理的特点是, 为每一个业务增强都提供一个代理类, 由代理类来创建代理对象. 下面我们通过静态代理来实现对转账业务进行身份验证. (1) 转账业务 public interface IAccountService { ...
SpringAOP动态代理
a55566999的博客
06-23 1784
动态代理介绍
Spring AOP两种动态代理对象实现方式
洞玄之境的博客
09-04 6593
一、JDK生成AopProxy代理对象 通过JDK的Proxy类的静态方法newProxyInstance方法得到最终的代理对象。该方法包含3个参数: /** 三个参数: 一个类装载器loader, 一个代理接口interfaces, 一个Proxy回调方法所在的对象handler:这个对象需要实现InvocationHandler接口,该接口实现类定义了invoke()方法,提供代理...
AOP动态代理
weixin_44411990的博客
01-17 1973
动态代理 特点:字节码随用随创建,随用随加载 作用:不修改源码的基础上对方法增强 分类: 基于接口的动态代理 涉及的类:Proxy 提供者:JDK官方 使用Proxy类中newProxyInstance方法创建代理对象代理类最少实现一个接口,如果没有则不能使用 newProxyInstance方法的参数 ClassLoader:类加载器 用于加载代理对象字节码的。和被代理对象使用相同的类加载器。固定写法 Class[]:字节码数组 用于让代理对象和被代理对象有相同方法。固定写法 Invocatio
Spring框架中的AOP动态代理解析
"Spring系列——AOP" ...Spring AOP通过动态代理机制,实现了对核心业务逻辑的解耦,提高了代码的可维护性和扩展性,是Spring框架中不可或缺的一部分。理解并熟练运用AOP,可以极大地提升JavaEE应用的开发效率和质量。
46
原创
8
点赞
8
收藏
6
粉丝
关注
私信
写文章

热门文章

  • FTP服务器操作手册 1000
  • 华夏ERP打包手册 778
  • windows server 华夏ERP部署手册 602
  • lo流知识(字节流 字符流) 521
  • jdk基础知识 485

最新文章

  • Liunx系统安装mysql数据库
  • SQL数据库基础
  • 实施方法论
2023年20篇
2022年26篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司公明网站排名优化网站建设优化哪家好广告流量太原瓷砖行业网站优化推广可靠吗如何优化网站底部企业网站优化 sit北辰区网站优化哪家效果好国内网站优化招商项目网络平台保定市网站seo优化排名网站优化的价值安丘网站优化推广价格丰镇市网站优化推广上海seo网站优化案例天水网站搜索引擎优化邢台网站优化招聘网站优化怎么筛选客户如何优化网站内链百姓网标王包年推广邯郸网站优化哪儿好红河网站优化方式深圳在线网站优化成功案例苏州网站排名优化软件价格邯郸网站推广优化技巧邢台手机网站建设优化案例淄博济南网站优化工具分析优化网站免费软件下载家用电器网站优化排名寻找网站优化第一做网站还需要做优化吗口碑好的餐饮行业网站优化方法权威的网站优化推广一站式服务歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化