Spring AOP属于第二代AOP。采用Java作为AOP的实现语言(AOL),采用动态代理机制和字节码生成技术实现。

代理设计模式

  • ISubject 对被访问者或者被访问资源的抽象,某些场景下不使用类似的统一抽象接口也可以
  • SubjectImpl 具体实现类
  • SubjectProxy 代理实现类
  • Client 代表访问者的抽象角色

代理不只局限于请求的转发,更多时候是对请求添加更多访问限制或简化使用
Spring AOP本质上就是采用这种代理机制实现的

Java 平台上的AOP实现机制

  • 动态代理
    通过JDK 1.3引入的动态代理机制,为相应的接口动态生成对应的代理对象,SPring AOP默认情况下采用这种机制。但动态代理只能对实现了相应Interface的类使用。
  • 动态字节码增强
    使用ASM或者CGLIB等Java工具库,在程序运行期间,动态构建字节码的class文件,只要满足Java虚拟机加载的class规范就行。无需接口,唯一限制就是无法对final 方法进行覆写。
  • Java代码生成
    比较古老,已退休
  • 自定义类加载器
    所有的Java程序的clas都要通过相应的类加载器加载到Java虚拟机之后才能运行。功能比之前几种方式强大,但加重类加载器本身的负担
  • AOL扩展
    最强大,最难掌握。

Spring AOP

AOP基本概念实现

  • Joinpoint
    仅支持方法级别的Joinpoint(Metho Execution),可以满足80%的开发需求了。
  • Pointcut

  • Advice

  • Aspect
    Advisor代表Spring中的Aspect,但是,与正常的Aspect不两只,Advisor通常只持有一个Pointcut和一个Advice。而理论上,Aspect定义可以有多个Pointcut和Advice

织入 ProxyFactory

俗话说得好,“万事俱务,只欠东风”,各个模块已经实现了,最后一步就是拼装了。
要进行织入,AspectJ采用ajc编译器;JBoss AOP使用自定义的ClassLoader,而Spring AOP使用类org.springframework.aop.framework.ProxyFactory作为织入器。

几种Spring AOP

  • Spring AOP 1.x 基于接口定义的的Advice声明方式:各种类型的Adivce定义需要实现特定的接口,Advice的管理可以通过IoC容器或者直接编程进行。
  • @AspectJ 2.0之后新增加,只需要以POJO形式声明相应的Aspect和Advice,然后通过相应的注解标注一下即可。各种信息的管理统一到一个位置,并且由于IDE的重构支持,AOP的管理更加方便高效。
  • 基于Schema的AOP。融合第一代和第二代。各种信息转移到XSD形式的容器配置文件中。
    应该依照当前应用环境、各种工具支持、整体团队能力等不同情况来权衡利弊。

Spring 初探(二) AOP 图集的更多相关文章

  1. spring学习(二) ———— AOP之AspectJ框架的使用

    前面讲解了spring的特性之一,IOC(控制反转),因为有了IOC,所以我们都不需要自己new对象了,想要什么,spring就给什么.而今天要学习spring的第二个重点,AOP.一篇讲解不完,所以 ...

  2. 学习 Spring (十二) AOP 基本概念及特点

    Spring入门篇 学习笔记 AOP: Aspect Oriented Programming, 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术 主要功能是:日志记录.性能统计.安全控 ...

  3. Spring 学习二-----AOP的原理与简单实践

    一.Spring  AOP的原理 AOP全名Aspect-Oriented Programming,中文直译为面向切面(方面)编程.何为切面,就比如说我们系统中的权限管理,日志,事务等我们都可以将其看 ...

  4. 框架应用:Spring framework (二) - AOP技术

    基础概念 线程中的方法栈 java程序虚拟机启动时会载入程序码,虚拟机会为每一条正在运行的线程生成一个方法调用栈,线程以方法运行为执行单位. AOP概念以及目标 AOP是面向切面编程,其实就是在不修改 ...

  5. Spring 初探(一) IoC 图集

    Spring 框架总体结构 IoC 直观 Spring IoC容器 Spring提供两种容器类型: - BeanFactory - ApplicationContext ApplicationCont ...

  6. spring(二) AOP之AspectJ框架的使用

    前面讲解了spring的特性之一,IOC(控制反转),因为有了IOC,所以我们都不需要自己new对象了,想要什么,spring就给什么.而今天要学习spring的第二个重点,AOP.一篇讲解不完,所以 ...

  7. spring注解、aop(二)

    使用注解配置spring 1.导入 spring-aop-5.0.6.RELEASE.jar包 2.为主配置文件引入新的命名空间 xmlns:context="http://www.spri ...

  8. Spring系列之AOP实现的两种方式

    AOP常用的实现方式有两种,一种是采用声明的方式来实现(基于XML),一种是采用注解的方式来实现(基于AspectJ). 首先复习下AOP中一些比较重要的概念: Joinpoint(连接点):程序执行 ...

  9. Spring核心框架 - AOP的原理及源码解析

    一.AOP的体系结构 如下图所示:(引自AOP联盟) 层次3语言和开发环境:基础是指待增加对象或者目标对象:切面通常包括对于基础的增加应用:配置是指AOP体系中提供的配置环境或者编织配置,通过该配置A ...

随机推荐

  1. 免费ip共享库

    分享一个免费的ip地址库查询,同时支持ipv4和ipv6查询,提供api接口.官网地址:https://www.calpha.club/ 希望可以帮助运维朋友们. python 2.7实例# -*- ...

  2. mysql 常见问题整理

    一 coalesce 在mysql中,其实有不少方法和函数是很有用的,这次介绍一个叫coalesce的,拼写十分麻烦,但其实作用是将返回传入的参数中第一个非null的值,比如 SELECT COALE ...

  3. 图解django的生命周期

    其实django的生命周期的大体框架就是这样,剩下的细致的,自己再补充! 图片实在是有点抽象! 谅解!! koala-----给你更多技术小干货

  4. 如果你的评论被WordPress的Akismet插件屏蔽,怎么解封?

    Akismet是Matt Mullenweg早期创办的一个项目,现在已经是Automattic公司的一个专注于剿杀垃圾评论的产品.在Wordpress用户中使用最多,z-blog也有用户在用,由于垃圾 ...

  5. linux mint ubuntu 安装qq

    git clone https://gitee.com/wszqkzqk/deepin-wine-for-ubuntu.gitcd deepin-wine-for-ubuntu./install.sh ...

  6. vue+ckEditor5

    1.安装依赖 "@ckeditor/ckeditor5-build-balloon": "^10.1.0", "@ckeditor/ckeditor5 ...

  7. Jenkins升级版本

    1 Jenkins的管理界面,下载最新版本的war包 2 找到自己部署Jenkins的war包的tomcat目录,替换最新的war包,重启tomcat即可 只需要把之前的war包重命名一个名字,不要以 ...

  8. CAN学习方法(知乎)

    作者:心机之花链接:https://www.zhihu.com/question/26776219/answer/244433861来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

  9. fragment初步认识

  10. Yii2 DatePicker时间选择器的使用

    bootstrap-Date Time Picker 详细配置请参考http://www.bootcss.com/p/bootstrap-datetimepicker/ use kartik\widg ...