标签:动态代理 出现 方法调用 err ima spec ring point 组成
AOP aspect oriented programing. 面向切面的编程.
编程中会遇到很多在代码中具有横向逻辑的代码, 比如log, 比如性能检测等代码, 这些代码将实际的业务逻辑代码包含在里面, 很难做到纵向的抽离这些重复的横向逻辑代码. 所以引入了AOP的概念.
指的是程序中实际的业务逻辑的类, 这些类初始化前后,类的某个方法调用前后, 出现异常后等这些, 所在的特定的位置被称为连接点.
AOP就是找到这些连接点并进行织入性增强.
连接点由两个信息确定: 1. 方法表示的执行点, 2. 相对点表示的方位.
AOP通过切点定位连接点, 一个切点可以匹配多个连接点. 切点通过org.springframework.aop.pointcut接口进行描述, 作为类和方法的连接点的查询条件.
增强是织入到目标类的连接点上的一段程序代码. 增强的接口都是带方位名的, BeforeAdvice, AfterRunningAdvice等.
即为业务逻辑对象
一种特殊的增强. 为类添加属性和方法, 实现没有实现的接口.
织入是将增强添加到目标类具体连接点上的一个过程.
有三种织入方式, 1. 编译期间织入(要求特殊的编译器). 2. 类装载期间织入(要求特殊的类装载器). 3.动态代理织入(在运行期间为目标类添加增强生成子类的方式.)
Spring使用3.动态代理织入. AspectJ使用1.2.
一个类被AOP织入增强后, 就产出一个结果类, 是融合了原来类和增强逻辑的代理类. 根据不同的代理方式, 代理类可能是原来类具有相同接口的类, 也可以是原来类的子类, 所以可以采用与调用原来类相同的方式调用代理类.
切面由切点和增强组成. 包括了横切路基的定义. 也包括了连接点的定义. Spring AOP就是负责实施切面的框架. 将切面定义的横切逻辑织入切面指定的链接点当中.
所以AOP的工作重心在于如何将增强应用于目标类的连接点上. 主要包括两个工作: 1. 如何通过切点和增强定位到连接点. 2. 如何在增强中编写切面的代码.
标签:动态代理 出现 方法调用 err ima spec ring point 组成
原文地址:https://www.cnblogs.com/it-dennis/p/9001555.html