aop里有切点,切面,通知的概念
Term 术语 Definition 定义
Concern A particular issue
(关注特定问题) 感兴趣应用的特定问题、概念、范围。例如,事务管理、持久化、日志、安全等。
Crosscutting Concern
(横切关注点) 在关注点实现中贯穿了很多类,这在面向对象(OOP)中通常很难实现和维护。
Aspect
(切面) 模块化的横切关注点,通过代码的聚合和隔离实现。
Join Point
(连接点) 在程序或者类执行时的一个点。在Spring的AOP实现中,连接点总是一个方法调用。其他的例子包括访问字段(包括实例中字段的读写),变量和异常处理。
Advice
(通知) 特定连接点所采取的动作。Spring有几种不同类型的通知,包括around、before、throws和after returning。在这几种类型的通知中,around是最强大的,在方法调用的前后都有执行一些操作的机会。之前用到的TraceInterceptor就是around类型的通知,它实现了AOP联盟的MethodInterceptor接口。通过实现下面的Spring接口可以使用其他类型的通知:
?? MethodBeforeAdvice
?? ThrowsAdvice
?? AfterReturningAdvice
Pointcut
(切入点) 连接点的集合,这些连接点确认何时一个通知将会触发。切入点通常使用正则表达式或者是通配符语法。
Introduction
(引入) 添加字段或者方法到一个通知类。Spring允许你在任何通知对象上引入新的接口。例如,你可以使用引入以便让任意对象实现IsModified接口,来简化缓存。
Weaving
(组织) 装配切面来创建一个被通知对象。可以在编译期间完成(像AspectJ做的那样)也可以在运行时完成。本章后面的组织策略部分详细讨论不同的组织策略(也就是实现AOP)。
Interceptor
(拦截器) 一种AOP实现策略,对与特点的连接点,可能存在一个拦截器链。
AOP Proxy
(AOP代理) AOP框架创建的对象,包括通知。在Spring中,一个AOP代理可能是JDK动态代理或者是CGLIB代理。
Target Object
(目标对象) 包含连接点的对象。在使用拦截的框架中,它是在拦截器链末端的对象实例。也叫做被通知对象或者被代理对象。
切面。 用个比喻会更形象一些。可以把切面理解成一把菜刀,而其他方法就好像是黏糕,如果你要把所有的黏糕都在某个
位置切断,那么就用这个菜刀就行了。这个菜刀,就是我们需要的切面类。
切入点。切入点一般是一个表达式。用上面的例子来说,就是我们对哪些黏糕“下手”。
例如 execution(* com.xyz.someapp.service.*.*(..))
通知。 通过切入点,我们知道要对哪些黏糕下手,但是,我们还得知道要在黏糕的哪个位置下手,是在头部(Before),
尾部(After),还是首尾(Around)等等。
最形象的例子,就是如果你想给所有的DB操作类都加上一个特殊的log,怎么弄呢?是修改所有的DB操作类,还是写一个类,就能让这个类的方法嵌入到所有的DB操作类中?
给哪些类在哪个位置“插入”一些本来没有的代码
这些“插入”的代码都是程序运行的时候动态插入的,所以看起来很神奇
有两种方式,一种是java本身提供了动态代理方式,这种方式基于接口;另一种是cglib这样的,动态修改java运行时的字节码
首先通过切入点来确定要切入到哪些类里
例如
execution(* com.xyz.someapp.service.*.*(..))
然后使用“通知”,确定切入的地点:是在头部(Before),
尾部(After),还是首尾(Around)
MethodBeforeAdvice(前置通知)
AfterReturningAdvice(后置通知)
MethodInterceptor(环绕通知)
异常通知(ThrowsAdvice)
引入通知
用户登录
还没有账号?立即注册
用户注册
投稿取消
文章分类: |
|
还能输入300字
上传中....