参考地址
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原理相关推荐

  1. Spring AOP原理及拦截器

    原理 AOP(Aspect Oriented Programming),也就是面向方面编程的技术.AOP基于IoC基础,是对OOP的有益补充. AOP将应用系统分为两部分,核心业务逻辑(Core bu ...

  2. modelandview使用过程_面试问烂的 Spring AOP 原理、Spring MVC 过程

    点击上方 Java后端,选择 设为星标 优质文章,及时送达 作者:莫那一鲁道链接:www.jianshu.com/p/e18fd44964eb Spring AOP ,SpringMVC ,这两个应该 ...

  3. AOP原理解析及Castle、Autofac、Unity框架使用

    转自:https://www.cnblogs.com/neverc/p/5241466.html AOP介绍 面向切面编程(Aspect Oriented Programming,英文缩写为AOP), ...

  4. 使用AspectJ注解技术实现AOP功能

    AspectJ是一个面向切面编程的框架,使用AspectJ不需要改动Spring配置文件,就可以实现Spring AOP功能.本篇结合实际案例详细讲述使用AspectJ实现AOP功能.通过本篇的学习, ...

  5. 全网最好懂的Spring AOP原理

    1 AOP概念 AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善. AOP ...

  6. 动态代理jdk和cglib区别、注意事项(private,static,final)、spring aop原理

    文章目录 一.代理简聊 二.静态代理 三.动态代理 1.jdk动态代理 2.cglib动态代理 四.动态代理总结.注意事项 1.jdk动态代理与cglib的区别. 2.注意事项及分析. 五.aop原理 ...

  7. 第三代测序技术的方法原理及其在生物领域的应用

    第三代测序技术的方法原理及其在生物领域的应用 张子敬  刘燕蓉  张顺进  贺花  李佳霄  刘贤  吕世杰  李志明  王二耀  雷初朝  黄永震   [摘要]:在自然界中,生物DNA的碱基序列包含 ...

  8. 深入掌握Java技术 EJB调用原理分析

      深入掌握Java技术 EJB调用原理分析     一个远程对象至少要包括4个class文件:远程对象:远程对象的接口:实现远程接口的对象的stub:对象的skeleton这4个class文件. 在 ...

  9. spring aop原理_Spring知识点总结!已整理成142页离线文档(源码笔记+思维导图)...

    写在前面 由于Spring家族的东西很多,一次性写完也不太现实.所以这一次先更新Spring[最核心]的知识点:AOP和IOC 无论是入门还是面试,理解AOP和IOC都是非常重要的.在面试的时候,我没 ...

  10. @EnableAspectJAutoProxy||AOP原理:【看给容器中注册了什么组件,这个组件什么时候工作,这个组件的功能是什么?】

    AOP原理:[看给容器中注册了什么组件,这个组件什么时候工作,这个组件的功能是什么?] @EnableAspectJAutoProxy是什么? * AOP原理:[看给容器中注册了什么组件,这个组件什么 ...

最新文章

  1. 学习Spring Boot:(五)使用 devtools热部署
  2. jssdk更新日志_关于jssdk版本的阿里云网站内容、产品介绍、帮助文档、论坛交流和云市场相关问题...
  3. 【华为云技术分享】如何做一个优秀软件-可扩展的架构,良好的编码,可信的过程
  4. 关于数据准备时,自动棌番的主键,这一字段数据的注意(IT总结之五)
  5. Gstreamer之重置PTS与DTS流程(二十)
  6. 自动部署 mysql_MySQL5.7自动部署脚本(持续更新)
  7. Java使用mysql游标_Mysql游标使用
  8. Excel在行上面一键定位可见单元格!
  9. PDF转CAD格式软件下载及使用教程
  10. SQL Server2019(Developer版)免费下载安装教程
  11. 对象及日期定时器、延时器
  12. 是什么偷走了我们浓浓的年味?
  13. ICCV2021: 淘系素材制备平台中的自研交互式分割技术(含试用demo)
  14. python--numpy模块、spicy模块、 matplotlib模块
  15. 计算机基础进制的换算教案,计算机系统基础(二)数值进制和进制转换
  16. ubuntu 安装openssl-devel
  17. ipfs文件服务器,IPFS的文件获取过程详解
  18. 8051单片机的内核的结构及运行过程解析
  19. Nuxt 整合 element-tiptap 编辑器 上传图片到阿里云OSS关键方法
  20. “邀请码” - 诈骗类应用分析

热门文章

  1. 学习Linux必备的硬件基础一网打尽
  2. BGP Flow Specification原理
  3. linux设备驱动——字符设备驱动
  4. 一个apk调用另一个apk的某个activity
  5. wxpython绘图保存_wxPython绘图模块wxPyPlot实现数据可视化
  6. logistic回归详解(三):梯度下降训练方法
  7. org.apache.hadoop.fs.ChecksumException: Checksum error
  8. 上网时间监控软件_网管软件有哪一些?哪家好?
  9. linux 更新目录时间戳,修改linux 文件的时间戳
  10. nsa php版本,mnsa网络