AOP中相关术语的理解

来源:互联网 发布:淘宝小也家是正品吗 编辑:程序博客网 时间:2024/05/21 21:33

简介

在学习Spring的AOP的时候需要理解连接点、切点、增强等概念,但是在网上或者书上看的解释感觉很模糊,下来谈谈我的理解。

连接点与切点

网上是通过数据库表来类比这两者的关系,但是我个人觉得用这个来解释很好,但是网上解释的思维混乱,而且感觉有错误。我用自己的方式沿用网上的例子解释两者的关系(可能有误)。

假设类A,A中有方法MA、MB、MC,Spring中的AOP是只有方法的连接点,现在创建一个数据表用来表示类A中关于连接点与切点的信息,数据表的字段依次为方法执行前、执行后、抛出异常等(主键为方法),每一个方法的为表的一个记录,类A中有三个方法,所以当前表中有三条记录,所谓的连接点就是指这些字段(或者说连接点就相当于数据库表中“字段”这个词),而切点就相当于该表中的主键(这里方法充当主键)。很显然,通过切点找到对应的记录行,再根据连接点找到对应的字段,完美。

增强

增强是织入到目标类连接点上的一段程序代码。增强既包含了用于添加到目标连接点上的一段执行逻辑,又包含了用于定位连接点(并没有提切点的定位信息)的方为信息,所以Spring所提供的增强接口都是带方位名的:BeforeAdvice(方法调用前的位置)、AfterReturningAdvice(访问返回后的位置)、ThrowsAdvice等。

目标对象

被加入横切逻辑的目标类

织入

    织入是将增强添加到目标类具体连接点上的过程。AOP有三种织入方式:
1)编译期织入,这要求使用特殊的Java编译器;
2)类装载期织入,这要求使用特殊的类装载器;
3)动态代理织入,在运行期为目标类添加增强生成子类的方式。
Spring采用动态代理织入,而AspectJ采用编译期织入和类装载期织入。

切面(Aspect)
切面由切点和增强组成(注意这句话的含义:切面由“切点”和“增强”组成,而增强包含了连接点的定位信息,结合连接点与切点的关系可以得知,这里的切点和连接点定位信息都包括了,因此已经可以定位到一个确定的横切点,再加上增强中被切入的代码逻辑,完美),它既包括了横切逻辑的定义,也包括了连接点的定义,Spring AOP就是负责实施切面的框架,它将切面所定义的横切逻辑织入到切面所指定的连接点中。



原创粉丝点击