AOP 我想大家对它一定都很熟悉,但是又有多少人对它的几个基本概念真正很清楚呢,官方文档看了很多,但总觉的讲的还是太抽象,今天我将以我自己的理解,用一种通俗的讲法,再解释一下:
1. Aspect: 你可以把它想象成那些你需要在整个application ,全局范围内要使用的common 的 feature(比如 logging, performance monitoring, exception handling, transaction management, etc).
2. Advice: Advice就是一段代码,将要在程序运行时被调用,它就是你的aspect的实现逻辑,是实现AOP最重要的部分,你可以把它看作是一个装饰器模式,只不过它不需要去包装一个object, 但他们有相同的功效。
3. JoinPoint: JoinPoint就是一个地址,在这个地方advice应当被执行。 (比如 field access, method invocation , constructor invocation, etc)Spring 的AOP当前只support Method invocation.
4.PointCut PointCut是有许多JoinPoint组成的,通常我们用通配符来定义PointCut,来定义一组JoinPoint,在这些地方 Advice需要被调用。(比如我们有一个PointCut(com.test.service.*(..)))那么service中的每个方法都是一个JointPoint.
5.Targets/Target Objects 这个概念Spring 的AOP用的多一点,因为Spring的AOP是用代理实现的,也就是给目标对象加上一个代理,然后所以对目标对象的调用都是通过这个代理去掉的。 这里的目标对象就是Targets/Target Objects.
6.Introduction(通知) Introduction 提供的一种机制可以在运行时给某个object 加上方法。在Spring 中,通知仅仅局限与 interface,也就是你只能在运行时动态给某个object加上一个interface.
以上是本人的理解,如不对,希望大家指出。
1. Aspect: 你可以把它想象成那些你需要在整个application ,全局范围内要使用的common 的 feature(比如 logging, performance monitoring, exception handling, transaction management, etc).
2. Advice: Advice就是一段代码,将要在程序运行时被调用,它就是你的aspect的实现逻辑,是实现AOP最重要的部分,你可以把它看作是一个装饰器模式,只不过它不需要去包装一个object, 但他们有相同的功效。
3. JoinPoint: JoinPoint就是一个地址,在这个地方advice应当被执行。 (比如 field access, method invocation , constructor invocation, etc)Spring 的AOP当前只support Method invocation.
4.PointCut PointCut是有许多JoinPoint组成的,通常我们用通配符来定义PointCut,来定义一组JoinPoint,在这些地方 Advice需要被调用。(比如我们有一个PointCut(com.test.service.*(..)))那么service中的每个方法都是一个JointPoint.
5.Targets/Target Objects 这个概念Spring 的AOP用的多一点,因为Spring的AOP是用代理实现的,也就是给目标对象加上一个代理,然后所以对目标对象的调用都是通过这个代理去掉的。 这里的目标对象就是Targets/Target Objects.
6.Introduction(通知) Introduction 提供的一种机制可以在运行时给某个object 加上方法。在Spring 中,通知仅仅局限与 interface,也就是你只能在运行时动态给某个object加上一个interface.
以上是本人的理解,如不对,希望大家指出。