Spring 面向切面(基础)

2014年11月07日 陈鑫杰

概述

在软件开发过程中,分布于应用多处的功能被称为横切关注点(cross-cutting concerns)。横切关注点从概念上是与应用的业务逻辑相分离的(但需要嵌入到应用的业务逻辑中)。将这些横切关注点与业务逻辑相分离就是面向切面编程(AOP)所要解决的。
简而言之,横切关注点可以被描述为影响应用多处的功能(例如:安全、事物)。
横切关注点可以模块化为特殊的类,这些类被成为切面

好处

  • 每个关注点都集中在一个特殊的类中,而不是分散在多处不同的业务逻辑中。
  • 服务模块更简洁。(服务模块只包含主要关注点(或核心功能)的代码,次要关注点的代码被转移到切面中。)

术语

通知(Advice)

切面的工作被称为通知。定义了切面是什么以及何时使用。

  • Before:在方法被调用之前调用通知。
  • After:在方法完成之后调用通知,无论方法执行是否成功。
  • After-returning:在方法成功执行之后调用通知。
  • After-throwing:在方法抛出异常之后调用通知。
  • Around:通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为。

连接点(Joinpoint)

在应用执行过程中能够插入切面的一个点。这个点可以是调用方法时、抛出异常时、甚至修改一个字段时。切面代码利用这些点插入到应用的正常流程之中,并添加新的行为。

切点(Poincut)

定义了切面在何处使用。会匹配通知所要织入的一个或多个连接点。

切面(Aspect)

通知和切点的结合。通知和切点定义了关于切面的全部内容。

引入(Introduction)

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

织入(Weaving)

将切面应用到目标对象来创建新的代理对象的过程。切面在指定的连接点被织入到目标对象中。

  • 编译期:切面在目标类编译时被织入。需要特殊的编译器。
  • 类加载期:切面在目标类加载到 JVM 时被织入。需要特殊的类加载器(ClassLoader)。
  • 运行期:切面在应用运行的某个时刻被织入。

Spring AOP

  • 基于代理的经典 AOP
  • @AspectJ 注解驱动的切面
  • 纯 POJO 切面
  • 注入式 AspectJ 切面(适合 Spring 各版本)

小结

以上是 Spring 面向切面的基本信息,实际应用可以通过 XML 配置或者注解来实现。

(转载本站文章请注明作者和出处 FoamValue – www.foamvalue.com ——=== 访问 404页面 寻找遗失儿童。 ===——