第三章 面向切面编程(AOP)基础
AOP相关概念
连接点(Joinpoint):
程序执行的某个特定位置:比如类开始初始化前、类初始化后、某个方法调用前、调用后等。一个类或一段程序代码拥有的一些具有边界性质的特定点,这些代码中的特定点就称为“连接点”,Spring仅支持方法的连接点。
切点(Pointcut):
匹配连接点(Joinpoint)的断言。连接点相当于数据记录,切点相当于查询条件,一个切点可以匹配多个连接点。
增强(Advice):
织入到目标类连接点上的一段程序代码。
目标对象(Target):
增强逻辑的织入目标类
引介(Introduction)
引介是一种特殊的增强,为类添加一些属性和方法。通过它可以动态的为业务类增加接口的实现逻辑,让业务类成为这个接口的实现类。
织入(Weaving):
将增强添加到对目标类具体连接点上的过程。
代理(Proxy)
一个类被AOP织入增强后,就产生了一个结果类,它是融合了原类和增强逻辑的代理类。根据不同的代理方式,代理类既可能是和原类具有相同接口的类,也可能是原类的子类,所以我们可以采用调用原类相同的方式调用代理类
切面(Aspect)
切面由切点和增强(引介)组成,它既包括了横切逻辑的定义,也包括了连接点的定义,spring AOP就是负责实施 切面的框架,它将切面定义的横切逻辑织入到切面所指定的连接点中。
AOP的工作重点在于如何将增强应用于目标对象的连接点上,这包括两个工作:
1,如何通过切点和增强定位到连接点上;
2,如何在增强中编写切面的代码;
代理机制:
AOP通过动态代理技术在运行期织入增强代码,首先了解下AOP使用的两种代理机制:
1,基于JDK的动态代理
JDK1.3以后,java提供了动态代理技术,允许开发者在运行期创建接口的代理实例。
JDK动态代理主要涉及两个类,
Java.lang.reflect.Proxy
Java.lang.reflect. InvocationHandler
InvocationHandler是一个接口,可以通过实现该接口定义的横切逻辑,并通过反射机制调用目标类的代码,动态的将横切逻辑和业务逻辑编织在一起。
Proxy利用InvocationHandler动态创建一个符合某一接口的实例,生成目标类的代理对象。
例子如下:
AOP相关概念
连接点(Joinpoint):
程序执行的某个特定位置:比如类开始初始化前、类初始化后、某个方法调用前、调用后等。一个类或一段程序代码拥有的一些具有边界性质的特定点,这些代码中的特定点就称为“连接点”,Spring仅支持方法的连接点。
切点(Pointcut):
匹配连接点(Joinpoint)的断言。连接点相当于数据记录,切点相当于查询条件,一个切点可以匹配多个连接点。
增强(Advice):
织入到目标类连接点上的一段程序代码。
目标对象(Target):
增强逻辑的织入目标类
引介(Introduction)
引介是一种特殊的增强,为类添加一些属性和方法。通过它可以动态的为业务类增加接口的实现逻辑,让业务类成为这个接口的实现类。
织入(Weaving):
将增强添加到对目标类具体连接点上的过程。
代理(Proxy)
一个类被AOP织入增强后,就产生了一个结果类,它是融合了原类和增强逻辑的代理类。根据不同的代理方式,代理类既可能是和原类具有相同接口的类,也可能是原类的子类,所以我们可以采用调用原类相同的方式调用代理类
切面(Aspect)
切面由切点和增强(引介)组成,它既包括了横切逻辑的定义,也包括了连接点的定义,spring AOP就是负责实施 切面的框架,它将切面定义的横切逻辑织入到切面所指定的连接点中。
AOP的工作重点在于如何将增强应用于目标对象的连接点上,这包括两个工作:
1,如何通过切点和增强定位到连接点上;
2,如何在增强中编写切面的代码;
代理机制:
AOP通过动态代理技术在运行期织入增强代码,首先了解下AOP使用的两种代理机制:
1,基于JDK的动态代理
JDK1.3以后,java提供了动态代理技术,允许开发者在运行期创建接口的代理实例。
JDK动态代理主要涉及两个类,
Java.lang.reflect.Proxy
Java.lang.reflect. InvocationHandler
InvocationHandler是一个接口,可以通过实现该接口定义的横切逻辑,并通过反射机制调用目标类的代码,动态的将横切逻辑和业务逻辑编织在一起。
Proxy利用InvocationHandler动态创建一个符合某一接口的实例,生成目标类的代理对象。
例子如下: