Spring 初探(二) AOP 图集
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 图集的更多相关文章
- spring学习(二) ———— AOP之AspectJ框架的使用
		前面讲解了spring的特性之一,IOC(控制反转),因为有了IOC,所以我们都不需要自己new对象了,想要什么,spring就给什么.而今天要学习spring的第二个重点,AOP.一篇讲解不完,所以 ... 
- 学习 Spring (十二) AOP 基本概念及特点
		Spring入门篇 学习笔记 AOP: Aspect Oriented Programming, 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术 主要功能是:日志记录.性能统计.安全控 ... 
- Spring 学习二-----AOP的原理与简单实践
		一.Spring AOP的原理 AOP全名Aspect-Oriented Programming,中文直译为面向切面(方面)编程.何为切面,就比如说我们系统中的权限管理,日志,事务等我们都可以将其看 ... 
- 框架应用:Spring framework (二) - AOP技术
		基础概念 线程中的方法栈 java程序虚拟机启动时会载入程序码,虚拟机会为每一条正在运行的线程生成一个方法调用栈,线程以方法运行为执行单位. AOP概念以及目标 AOP是面向切面编程,其实就是在不修改 ... 
- Spring 初探(一) IoC 图集
		Spring 框架总体结构 IoC 直观 Spring IoC容器 Spring提供两种容器类型: - BeanFactory - ApplicationContext ApplicationCont ... 
- spring(二) AOP之AspectJ框架的使用
		前面讲解了spring的特性之一,IOC(控制反转),因为有了IOC,所以我们都不需要自己new对象了,想要什么,spring就给什么.而今天要学习spring的第二个重点,AOP.一篇讲解不完,所以 ... 
- spring注解、aop(二)
		使用注解配置spring 1.导入 spring-aop-5.0.6.RELEASE.jar包 2.为主配置文件引入新的命名空间 xmlns:context="http://www.spri ... 
- Spring系列之AOP实现的两种方式
		AOP常用的实现方式有两种,一种是采用声明的方式来实现(基于XML),一种是采用注解的方式来实现(基于AspectJ). 首先复习下AOP中一些比较重要的概念: Joinpoint(连接点):程序执行 ... 
- Spring核心框架 - AOP的原理及源码解析
		一.AOP的体系结构 如下图所示:(引自AOP联盟) 层次3语言和开发环境:基础是指待增加对象或者目标对象:切面通常包括对于基础的增加应用:配置是指AOP体系中提供的配置环境或者编织配置,通过该配置A ... 
随机推荐
- 第k大异或值
			这道题与2018年十二省联考中的异或粽子很相像,可以算作一个简易版: 因为这不需要可持久化: 也就是说求任意两个数异或起来的第k大值: 首先把所有数放进trie里. 然后二分答案,枚举每个数,相应地在 ... 
- PAT B1001 害死人不偿命的(3n+1)猜想 (15)
			AC代码 #include <cstdio> int main() { int n,step; scanf("%d", &n); while(n != 1) { ... 
- layui时间显示
			第一次使用layui框架吧!记录layui踩到的坑! 个人洁癖,不太喜欢显示时分秒. 最后终于找到解决方案了! 代码如下: {field: 'ctime',title: '时间',templet:&q ... 
- Open-falcon监控
			https://book.open-falcon.org/zh_0_2/ 本文档记录了CentOS7.4下open-falcon-v2监控系统的部署流程,以及一些需要注意的地方. 环境准备 安装Red ... 
- less的引用及公共变量的抽离
			一.什么是less? less是什么自然不用多言,乃一个css预编译器,可以扩展css语言,添加功能如如允许变量(variables),混合(mixins),函数(functions) 和许多其他的技 ... 
- spring-test跟junit结合单元测试获取ApplicationContext实例的方法
			步骤 1.继承AbstractJUnit4SpringContextTests 2.引入ApplicationContext 示例代码:(可以根据name或者类型获取bean) import or ... 
- linux系统编程相关
			基本的概念:程序,进程,并发,单道程序设计,多道程序设计,时钟中断. 存储介质:寄存器(操作系统的位数是针对寄存器而言的,32位识字节,64位就是8字节).缓存cache.内存,硬盘,网络. cpu的 ... 
- mqtt协议实现 java服务端推送功能(二)java demo测试
			上一篇写了安装mosQuitto和测试,但是用cmd命令很麻烦,有没有一个可视化软件呢? 有,需要在google浏览器下载一个叫MQTTLens的插件 打开MQTTLens后界面如下: 打开conne ... 
- Asp.Net  Server.MapPath()用法
			做了一个上传文件的功能 本地测试没问题 部署到服务器之后 一直报错 由于 某些历史原因 看不到错误信息 最后发现是路径的问题 其实这么简单的问题 最早该想到的 ...... Server.MapPat ... 
- Go语言并发机制
			Go语言中的并发 使用goroutine编程 使用 go 关键字用来创建 goroutine .将go声明放到一个需调用的函数之前,在相同地址空间调用运行这个函数,这样该函数执行时便会作为一个独立的并 ... 
