Spring AOP的理解_世界最资讯
一,什么是AOP?
(相关资料图)
Spring AOP,即面向切面思想。使用切面来处理一些问题需要考虑:从哪里进行切入、在什么时候切入以及切面增加什么行为。整个AOP体系可以梳理为下图:
其常用到的一些术语:
切面:将通知应用到切入点的过程
连接点:类里面可以被增强的方法。
切入点:类里面真正被增强的方法。
通知:实际增强的逻辑部分,包括前置、后置、环绕、异常、最终通知
二,aop原理
Spring AOP的原理总结来说,就是动态代理。采用代理模式,生成一个个代理类,然后替换掉真实实现类来对外提供服务。Spring AOP就是通过getBean()方法返回代理类的实例。该代理类是Spring采用JDK Proxy或CGLIB动态生成的。(IT枫斗者怎么样)
2.1、JDK动态代理
优点:
JDK动态代理是JDK原生的,不需要任何依赖即可使用;
通过反射机制生成代理类的速度要比CGLib操作字节码生成代理类的速度更快。(IT枫斗者怎么样)
缺点:
如果要使用JDK动态代理,被代理的类必须实现了接口,否则无法代理;
JDK动态代理无法为没有在接口中定义的方法实现代理,假设我们有一个实现了接口的类,我们为它的一个不属于接口中的方法配置了切面,Spring仍然会使用JDK的动态代理,但是由于配置了切面的方法不属于接口,为这个方法配置的切面将不会被织入;
JDK动态代理执行代理方法时,需要通过反射机制进行回调,此时方法执行的效率比较低。
2.2CGLib动态代理
优点:
使用CGLib代理的类,不需要实现接口,因为CGLib生成的代理类是直接继承自需要被代理的类;
CGLib生成的代理类是原来那个类的子类,这就意味着这个代理类可以为原来那个类中,所有能够被子类重写的方法进行代理;(IT枫斗者怎么样)
CGLib生成的代理类,和我们自己编写并编译的类没有太大区别,对方法的调用和直接调用普通类的方式一致,所以CGLib执行代理方法的效率要高于JDK的动态代理;
缺点:
由于CGLib的代理类使用的是继承,这意味着如果需要被代理的类是一个final类,则无法使用CGLib代理;
由于CGLib实现代理方法的方式是重写父类的方法,所以无法对final方法,或者private方法进行代理,因为子类无法重写这些方法;
CGLib生成代理类的方式是通过操作字节码,这种方式生成代理类的速度要比JDK通过反射生成代理类的速度更慢;(IT枫斗者怎么样)
三,Spring AOP的生效方式
Spring AOP的关键类就是DefaultAdvisorAutoProxyCreator。该类能自动将所有的advisor生效。通过查看该类的继承结构,惊喜地发现,最后居然是BeanPostProcessor。(IT枫斗者怎么样)
上面是BeanPostProcessor的源码。其两个方法分别在init-method的前后得到执行。体现在Spring IOC中如下所示:
在AbstractAutowireCapableBeanFactory类中,对refresh()的最后一步,初始化所有的Singleton beans时,在第三步——执行bean初始化方法中,调用BeanPostProcessor的两个方法,来执行增强策略。(IT枫斗者怎么样)
四,复写BeanPostProcessor的方法
知道Spring AOP在哪里生效了,现在需要知道的就是如何完成的代理增强。通过查看DefaultAdvisorAutoProxyCreator的代理结构,从AbstractAutoProxyCreator中找到了对BeanPostProcessor两个方法的复写。
通过上述代码,不论是前置增强,还是后置增强,最主要的过程就是创建代理——createProxy()(IT枫斗者怎么样)
上一篇:中科院启动首个开放创新试点领域
下一篇:最后一页
关于郭涛等7名同志拟任职的公示
根据《党政领导干部选拔任用工作条例》和有关规定,现将拟任职干部情况公示如下,请予监督:郭涛,1972年3月生,大学,管理学博士,中共党
2022-05-19河南疫情最新消息|5月18日河南新增本土确诊病例11例、本土无症状感染者9例
5月18日0—24时,全省新增本土确诊病例11例(许昌市11例),新增本土无症状感染者9例(郑州市4例,许昌市4例,鹤壁市1例),无新增本土疑似
2022-05-19安阳、焦作……河南三市发布最新人事信息
安阳市人民代表大会常务委员会任免名单(2022年5月17日安阳市第十四届人民代表大会常务委员会第三十四次会议通过)(一)决定免去:马卫安
2022-05-19注意!沪陕高速信阳叶信段即将施工 通行请小心
记者从信阳高速公路公安交通警察支队了解到,2022年5月23日6时至8月31日22时,沪陕高速信阳叶信段(K764至K85)北幅,将分阶段、分路段进行
2022-05-19
@千万郑州人,今后非机动车违法采取新办法,需现场朗读“承诺书”
5月18日,记者从郑州交管局获悉,近日,郑州交警在查处非机动车、电动车等交通违法时,通过依法依规处罚、现场学习交通法规,扫码下载朗读
2022-05-194月河南物价水平保持温和上涨
据国家统计局河南调查总队数据显示,4月份全省居民消费价格同比上涨1 6%,涨幅比上月扩大0 6个百分点;1-4月,全省居民消费价格同比上涨0 8
2022-05-19
被车评人集体声讨的保时捷终于妥协:免费恢复功能,延保一年
5月18日,针对带电动调节功能转向柱减配事件,保时捷中国公布解决方案。保时捷中国方面表示,针对此前承诺过恢复转向柱电动调节功能的客户
2022-05-19
郑州市经开区率先部署15分钟核酸检测“采样圈” 记者实探经北一路核酸采样工作站
医护人员不用穿成大白,呆在凉爽的小屋里就能完成核酸采样;而市民也不用担心飞沫传染,就近来到小屋前就能迅速进行核酸检测。5月17日上午
2022-05-19以身挡落石,郑州新密消防员18米深井救人
5月15日17时31分,郑州市消防救援支队新密大队指挥中心接到群众报警,一名男子坠入该市矿区总医院后院围墙外18米深井内,身体受伤无法动弹
2022-05-19
2022年郑州市中招政策发布:6月22日—24日考试,总分600分
5月17日上午,郑州市教育局召开2022年郑州市中招工作会议,并进行新闻发布。今年,郑州市中招考试时间为6月22日-24日,由于今年取消了中招
2022-05-19X 关闭





X 关闭
- 最新全国疫情中高风险地区名单:全国现有高中风险地区15+64个(统计时间:5月19日6时)
- 北京疫情最新消息|5月18日北京新增50例本土确诊病例和5例无症状感染者
- 上海疫情最新消息|5月18日上海新增本土确诊病例82例和本土无症状感染者637例
- 郑州限号|今天是2022年5月19日,郑州限行尾号是4和9
- 发码总数超68万!郑州市“场所码”覆盖精度再提升
- 郑州发布100号通告:调整封控管控区域
- 【“郑”在抗疫】郑州互联网企业开展爱心购瓜网络公益活动
- 10岁顽童因“想妈妈”爬楼顶,暖心民警化身“心理医生”解心结
- 洛阳馨悦社工:以微薄之力让社区更安全
- 平顶山新华区对4名违反疫情防控有关规定人员依法处理