技术问题解答-AOP原理
参考地址
Spring 框架简介:https://www.ibm.com/developerworks/cn/java/wa-spring1/
AOP原理
面向切面的编程,即 AOP(Aspect-OrientedProgramming),是一种编程技术,它允许程序员对横切关注点或横切典型的职责分界线的行为(例如日志和事务管理)进行模块化。AOP 的核心构造是方面,它将那些影响多个类的行为封装到可重用的模块中。
OOP(Object-Oriented Programing,面向对象编程)
引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。
AOP(Aspect Oriented Programming,面向切面编程)
利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即切面。
所谓“切面”,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。
AspectJ静态代理
AspectJ是静态代理的增强,所谓的静态代理就是AOP框架会在编译阶段生成AOP代理类,因此也称为编译时增强。
AOP动态代理
所谓的动态代理就是说AOP框架不会去修改字节码,而是在内存中临时为方法生成一个AOP对象,这个AOP对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法。
Spring AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理。JDK动态代理通过反射来接收被代理的类,并且要求被代理的类必须实现一个接口。JDK动态代理的核心是InvocationHandler接口和Proxy类。
如果目标类没有实现接口,那么Spring AOP会选择使用CGLIB来动态代理目标类。CGLIB(Code Generation Library),是一个代码生成的类库,可以在运行时动态的生成某个类的子类,注意,CGLIB是通过继承的方式做的动态代理,因此如果某个类被标记为final,那么它是无法使用CGLIB做动态代理的。
AspectJ在编译时就增强了目标对象,Spring AOP的动态代理则是在每次运行时动态的增强,生成AOP代理对象,区别在于生成AOP代理对象的时机不同,相对来说AspectJ的静态代理方式具有更好的性能,但是AspectJ需要特定的编译器进行处理,而Spring AOP则无需特定的编译器处理。
技术问题解答-AOP原理相关推荐
- Spring AOP原理及拦截器
原理 AOP(Aspect Oriented Programming),也就是面向方面编程的技术.AOP基于IoC基础,是对OOP的有益补充. AOP将应用系统分为两部分,核心业务逻辑(Core bu ...
- modelandview使用过程_面试问烂的 Spring AOP 原理、Spring MVC 过程
点击上方 Java后端,选择 设为星标 优质文章,及时送达 作者:莫那一鲁道链接:www.jianshu.com/p/e18fd44964eb Spring AOP ,SpringMVC ,这两个应该 ...
- AOP原理解析及Castle、Autofac、Unity框架使用
转自:https://www.cnblogs.com/neverc/p/5241466.html AOP介绍 面向切面编程(Aspect Oriented Programming,英文缩写为AOP), ...
- 使用AspectJ注解技术实现AOP功能
AspectJ是一个面向切面编程的框架,使用AspectJ不需要改动Spring配置文件,就可以实现Spring AOP功能.本篇结合实际案例详细讲述使用AspectJ实现AOP功能.通过本篇的学习, ...
- 全网最好懂的Spring AOP原理
1 AOP概念 AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善. AOP ...
- 动态代理jdk和cglib区别、注意事项(private,static,final)、spring aop原理
文章目录 一.代理简聊 二.静态代理 三.动态代理 1.jdk动态代理 2.cglib动态代理 四.动态代理总结.注意事项 1.jdk动态代理与cglib的区别. 2.注意事项及分析. 五.aop原理 ...
- 第三代测序技术的方法原理及其在生物领域的应用
第三代测序技术的方法原理及其在生物领域的应用 张子敬 刘燕蓉 张顺进 贺花 李佳霄 刘贤 吕世杰 李志明 王二耀 雷初朝 黄永震 [摘要]:在自然界中,生物DNA的碱基序列包含 ...
- 深入掌握Java技术 EJB调用原理分析
深入掌握Java技术 EJB调用原理分析 一个远程对象至少要包括4个class文件:远程对象:远程对象的接口:实现远程接口的对象的stub:对象的skeleton这4个class文件. 在 ...
- spring aop原理_Spring知识点总结!已整理成142页离线文档(源码笔记+思维导图)...
写在前面 由于Spring家族的东西很多,一次性写完也不太现实.所以这一次先更新Spring[最核心]的知识点:AOP和IOC 无论是入门还是面试,理解AOP和IOC都是非常重要的.在面试的时候,我没 ...
- @EnableAspectJAutoProxy||AOP原理:【看给容器中注册了什么组件,这个组件什么时候工作,这个组件的功能是什么?】
AOP原理:[看给容器中注册了什么组件,这个组件什么时候工作,这个组件的功能是什么?] @EnableAspectJAutoProxy是什么? * AOP原理:[看给容器中注册了什么组件,这个组件什么 ...
最新文章
- 学习Spring Boot:(五)使用 devtools热部署
- jssdk更新日志_关于jssdk版本的阿里云网站内容、产品介绍、帮助文档、论坛交流和云市场相关问题...
- 【华为云技术分享】如何做一个优秀软件-可扩展的架构,良好的编码,可信的过程
- 关于数据准备时,自动棌番的主键,这一字段数据的注意(IT总结之五)
- Gstreamer之重置PTS与DTS流程(二十)
- 自动部署 mysql_MySQL5.7自动部署脚本(持续更新)
- Java使用mysql游标_Mysql游标使用
- Excel在行上面一键定位可见单元格!
- PDF转CAD格式软件下载及使用教程
- SQL Server2019(Developer版)免费下载安装教程
- 对象及日期定时器、延时器
- 是什么偷走了我们浓浓的年味?
- ICCV2021: 淘系素材制备平台中的自研交互式分割技术(含试用demo)
- python--numpy模块、spicy模块、 matplotlib模块
- 计算机基础进制的换算教案,计算机系统基础(二)数值进制和进制转换
- ubuntu 安装openssl-devel
- ipfs文件服务器,IPFS的文件获取过程详解
- 8051单片机的内核的结构及运行过程解析
- Nuxt 整合 element-tiptap 编辑器 上传图片到阿里云OSS关键方法
- “邀请码” - 诈骗类应用分析
热门文章
- 学习Linux必备的硬件基础一网打尽
- BGP Flow Specification原理
- linux设备驱动——字符设备驱动
- 一个apk调用另一个apk的某个activity
- wxpython绘图保存_wxPython绘图模块wxPyPlot实现数据可视化
- logistic回归详解(三):梯度下降训练方法
- org.apache.hadoop.fs.ChecksumException: Checksum error
- 上网时间监控软件_网管软件有哪一些?哪家好?
- linux 更新目录时间戳,修改linux 文件的时间戳
- nsa php版本,mnsa网络