Spring的AOP相关知识

来源:互联网 发布:英国劳氏海事数据库 编辑:程序博客网 时间:2024/05/16 15:28

AOP编程的应用场景:

性能监控      访问控制      事务管理      日志记录


AOP  希望将这些分散在各个业务逻辑代码中的相同代码,通过横向切割的方式抽取到一个独立的模块中,还业务逻辑类一个清晰的世界。


连接点(Joinpoint):spring仅支持方法的连接点,仅能在方法调用前,方法调用后,方法抛出异常时以及方法调用前后这些程序执行点织入增强

切点(Pointcut):每个程序类都拥有多个连接点,AOP通过“切点”定位特定的连接点。

增强(Advice):增强是织入到目标类连接点上的一段程序代码。

目标对象(target):增强逻辑的织入目标


织入(Weaving):织入是将增强添加对目标类具体连接点上的过程

1、编译期织入 ,这要求使用特殊的Java编译器

2、类装载期织入,这要求使用特殊的类装载器

3、动态代理织入,在运行期为目标类添加增强生成子类的方式。

Spring采用动态代理织入, 而AspectJ采用编译期织入和类装载期织入。


代理(Proxy)

       一个类被AOP织入增强后,就产出了一个结果类,它是融合了原类和增强逻辑的代理类。根据不同的代理方式,代理类既可能是和原类具有相同接口的类,也可能就是原类的子类,所以我们可以调用原类的方式调用代理类。


切面(Aspect)

     切面是由切点和增强组成,它既包括了横切逻辑的定义,也包括连接点的定义,SpringAOP就是负责实施切面的框架,它将切面所定义的横切逻辑织入到切面多指定的连接点中。

     AOP的工作重心在于如何将增强应用于目标对象的连接点上,这里首先包括两个工作:第一,如何通过切点和增强定位到连接点上;如何在增强中编写切面的代码。



Spring AOP 使用动态代理技术在运行期织入增强的代码。

两种代理机制  一种是基于JDK的动态代理(只支持接口代理),另一种是基于CGLib的动态代理








0 0