引言:
Aop(Aspect-Oriented Programming,面向切面编程)是一种新的方法论,是对传统OOP(Object-Oriented Programming,面向对象编程)的补充
AOP简介
- AOP主要编程对象是切面(aspect),而切面是横切关注点的模块化。
- 在应用AOP编程时, 仍然需要定义公共功能, 但可以明确的定义这个功能在哪里, 以什么方式应用, 并且不必修改受影响的类。这样一来横切关注点就被模块化到特殊的对象(切面)里。
- AOP的好处:
1.每个事物逻辑位于一个位置,代码不分散,便于维护和升级
2.业务模块更简洁,只包含核心业务代码
AOP相关术语
横切关注点:
验证参数,日志(前置日志、后置日志)等切面(Aspect):
横切关注点(跨越应用程序多个模块的功能)被模块化的特殊对象通知(Advice):
切面必须要完成的工作目标(Target):
被通知的对象代理(Proxy):
向目标对象应用通知之后创建的对象连接点(Joinpoint):
程序执行的某个特定位置:如类某个方法调用前、调用后、方法抛出异常后等。连接点由两个信息确定:方法表示的程序执行点;相对点表示的方位。例如 ArithmethicCalculator#add() 方法执行前的连接点: 执行点为 ArithmethicCalculator#add(); 方位为该方法执行前的位置切点(pointcut):
每个类都拥有多个连接点:例如 ArithmethicCalculator 的所有方法实际上都是连接点,即连接点是程序类中客观存在的事务。AOP通过切点定位到特定的连接点。类比:连接点相当于数据库中的记录,切点相当于查询条件。切点和连接点不是一对一的关系,一个切点匹配多个连接点,切点通过org.springframework.aop.Pointcut 接口进行描述,它使用类和方法作为连接点的查询条件
相关术语 | 描述 |
---|---|
横切关注点 | 验证参数,日志(前置日志、后置日志)等 |
切面(Aspect) | 横切关注点(跨越应用程序多个模块的功能)被模块化的特殊对象 |
通知(Advice) | 切面必须要完成的工作 |
目标(Target) | 被通知的对象 |
代理(Proxy) | 向目标对象应用通知之后创建的对象 |
连接点(Joinpoint) | 程序执行的某个特定位置:如类某个方法调用前、调用后、方法抛出异常后等。连接点由两个信息确定:方法表示的程序执行点;相对点表示的方位。例如 ArithmethicCalculator#add() 方法执行前的连接点: 执行点为 ArithmethicCalculator#add(); 方位为该方法执行前的位置 |
切点(pointcut) | 每个类都拥有多个连接点:例如 ArithmethicCalculator 的所有方法实际上都是连接点,即连接点是程序类中客观存在的事务。AOP通过切点定位到特定的连接点。类比:连接点相当于数据库中的记录,切点相当于查询条件。切点和连接点不是一对一的关系,一个切点匹配多个连接点,切点通过org.springframework.aop.Pointcut 接口进行描述,它使用类和方法作为连接点的查询条件 |