Spring in Action AOP

1. 散布于程序中多个地点的函数被称为“交叉事务”,它们一般是与程序业务逻辑分开的,把这些交叉事务与业务逻辑分离开正是面向切面编程的作用。

2. 使用面向切面编程时,我们仍然是在一个地方定义公共功能,但可以明确地定义这个功能在哪里、以何种方式应用,并且不必修改受影响的类。这样,交叉事务就可以被模块化到特殊的对象里,这些对象就称为“切面”。

3. 通知(Advice) 定义切面是什么以及何时使用,描述切面要完成的工作,以及何时执行。方法被调用时所执行的代码。

    连接点(Joinpoint)在程序执行过程中能够插入切面的一个点,能够应用通知的全部点。这个点可以是方法被调用时,异常被抛出时。

    切入点(PointCut)切入点可以缩小切面通知的连接点范围,定义何地执行通知。通常使用明确的类和方法名称,或是利用正则表达式定义匹配的类和方法名来定义切入点。定义哪些连接点会得到通知。封转了决策逻辑,决定是否调用通知。

   切面(Aspect)切面是通知和切入点的结合。通知和切入点共同定义了关于切面的全部内容-----功能、何时、何地

4. Spring对AOP的支持仅局限于方法注入。Spring利用代理类包裹切面,从而把它们织入到Spring管理的Bean里。代理类装作目标Bean,截取被通知的方法调用,再把这些调用转发到真正的目标Bean。

代理包裹目标对象,处理方法调用,执行额外的切面逻辑,然后调用目标方法。

5. 生成代理类的两种方式

(1)目标对象实现的是一个接口,Spring使用JDK的java.lang.reflect.Proxy类,它允许Spring动态生成一个新类来实现必要的接口、织入任何通知、并且把这些接口的任何调用都转发到目标类。

(2)如果目标类不是实现一个接口,Spring就使用CGLIB库生成目标类的一个子类。在创建子类的时,Spring织入通知,并且把这对这个子类的调用委托到目标类。

6.Spring的AOP共包括以下5种类型的通知,分别由一个接口进行定义。

(1). 前置通知:在某连接点之前执行的通知                  org.springframework.aop.MethodBeforeAdvice

(2). 返回后通知:在某连接点正常完成后执行的通知。   org.springframework.aop.AfterReturningAdvice

(3). 抛出异常后通知:在方法抛出异常,退出时执行的通知;   org.springframework.aop.ThrowsAdvice

(4). 环绕通知:包围一个连接点的通知,如方法调用,这是最强大的一种通知类型。环绕通知可以在方法调用前后完成自定义的行为。它也会选择是继续执行连接点,还是直接返回它们自己的返回值或通过抛出异常来结束执行。

org.aopallicance.intercept.MethodInterceptor

(5). 引入通知:org.springframework.aop.IntroductionInterceptor 

7.

猜你喜欢

转载自vowtree.iteye.com/blog/1070644