zoukankan      html  css  js  c++  java
  • Spring 实战-第四章-面向切面的Spring

    软件开发中,散布于应用中多处的功能被称为横切关注点(cross-cutting concern),这些横切关注点从概念上是与应用的业务逻辑相

    分离的(但是往往会直接嵌入到应用的业务逻辑中)。把这些横切关注点与业务逻辑相分离正式面向切面编程(AOP)所要解决的问题。

    如果要重用通用功能,最常见的面向对象技术是继承(inheritance)或委托(delegation)。但是,如果在整个应用中都是用相同的基

    类,继承往往会导致一个脆弱的对象体系;而是用委托可能需要对委托对象进行复杂的调用。

    横切关注点可以被模块化为特殊的类,这些类被称为切面(aspect)。这样做有两个好处:首先,现在每个关注点都集中于一个地方,

    而不是分散到多处代码中;其次,服务模块更简洁,因为它们只包含主要关注点(或核心功能)的代码,二次要关注点的代码被转移到切面中。

    • AOP术语

    通知(Advice)

    切面的工作被称为通知,通知定义了切面是什么以及何时使用。Spring切面可以应用5中类型的通知:

    • 前置通知(Before):在目标方法被调用之前调用通知功能;
    • 后置通知(After):在目标方法完成之后调用通知,此时不会关心方法的输出是什么;
    • 返回通知(After-returning):在目标方法成功执行之后调用通知;
    • 异常通知(After-throwing):在目标方法抛出异常后调用通知;
    • 环绕通知(Around):通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义行为。

    连接点(Join point)

    连接点是在应用执行过程中能够插入切面的一个点。

    切点(Pointcut)

    切点的定义会匹配通知所要织入的一个或多个连接点。定义了和“何处”。

    切面(Aspect)

    切面是通知和切点的结合。

    引入(Introduction)

    引入允许向现有的类添加新方法或属性。

    织入(Weaving)

    织入是把切面应用到目标对象并创建新的代理对象的过程。

    在目标对象的生命周期里有多个点可以织入:

    • 编译期:切面在目标类编译时被织入。这种方式需要特殊的编译器。AspectJ的织入编译器就是以这种方式织入切面的。
    • 类加载期:切面在目标类加载到JVM时被织入。这种方式需要特殊的类加载器(ClassLoader),它可以在目标类被引入应用之前增强该目标类的字节码。
    • 运行期:切面在应用运行的某个时刻被织入。一般情况下,在织入切面时,AOP容器会为目标对象动态地创建一个代理对象。SpringAOP就是以这种方式织入切面的。

    Spring提供了4种类型的AOP支持:

    • 基于代理的经典SpringAOP;
    • 纯POJO切面;
    • @AspectJ注解驱动的切面;
    • 注入式Aspect切面(适用于Spring各版本)。

    前三种都是SpringAOP实现的变体,SpringAOP构建在动态代理基础之上,因此,Spring对于AOP的支持局限于方法拦截,故只支持方法级别的连接点。

  • 相关阅读:
    iphone那些事儿
    【转】我面试过最出色的项目主管,入职半年就离职了。
    net::ERR_ABORTED 404 (Not Found)
    四大名著
    测试心理状态
    typescript那些事儿
    flexbox父盒子flex-direction属性
    flexbox父盒子align-content属性
    flexbox父盒子flex-wrap属性
    flexbox父盒子align-items属性
  • 原文地址:https://www.cnblogs.com/lvjianwei/p/7491310.html
Copyright © 2011-2022 走看看