Spring AOP 概念与快速入门篇

本文内容

  1. Spring AOP含义和目标
  2. AOP相关概念
  3. 声明式AOP快速入门
  4. 编程式创建代理对象

Spring AOP含义和目标

OOP: Object-oriented Programming 面向对象编程,大家再熟悉不过了

AOP:Aspect-oriented Programming 面向切面编程

面向切面编程通过提供另一种思考程序结构的方式来补充面向对象编程。OOP 中模块化的关键单元是类,而 AOP 中模块化的单元是切面。

Spring 的关键组件之一是 AOP 框架。Spring IoC 容器不依赖 AOP,AOP 对 Spring IoC 的补充提供了非常强大的中间件解决方案。主要用于下面2方面:

  • 提供声明式服务。最重要的此类服务是声明式事务管理。
  • 让用户实现自定义切面,用 AOP 补充他们对 OOP 的使用。

Spring AOP 的能力和目标

Spring AOP 是用纯 Java 实现的。不需要特殊的编译过程。 Spring AOP 不需要控制类加载器层次结构,因此适用于 servlet 容器或应用程序服务器。

Spring AOP 当前仅支持方法执行连接点(建议在 Spring bean 上执行方法)。字段拦截未实现。

Spring AOP 的 AOP 方法不同于大多数其他 AOP 框架。尽管 Spring AOP 非常强,其目的不是提供最完整的 AOP 实现,相反,其目的是提供 AOP 实现和 Spring IoC 之间的紧密集成,以帮助解决企业应用程序中的常见问题。因此,Spring Framework 的 AOP 功能通常与 Spring IoC 容器结合使用。切面是通过使用普通的 bean 定义语法来配置的(尽管这允许强大的“自动代理”功能),这是与其他 AOP 实现的关键区别。

Spring AOP 从不努力与 AspectJ 竞争以提供全面的 AOP 解决方案。Spring AOP 等基于代理的框架和 AspectJ 等成熟框架都很有价值,它们是互补的,而不是竞争的。Spring 将 Spring AOP 和 IoC 与 AspectJ 无缝集成,以在一致的基于 Spring 的应用程序架构中实现 AOP 的所有使用。此集成不会影响 Spring AOP API 或 AOP Alliance API。 Spring AOP 保持向后兼容。

AOP相关概念

先了解一下核心 AOP 概念和术语,方便后面深入使用。

切面 Aspect

跨多个类的关注点的模块化。事务管理是企业 Java 应用程序中横切关注点的一个很好的例子。

连接点 Join point

程序执行过程中的一个点,例如方法的执行或异常的处理。在 Spring AOP 中,一个连接点总是代表一个方法执行。

通知 Advice

切面在特定连接点采取的操作。不同类型如前置通知,环绕通知等。 Spring将通知建模为拦截器,并在连接点周围维护一系列拦截器。

切点 Pointcut

匹配连接点的谓词。 Advice 与切入点表达式相关联,并在与切入点匹配的任何连接点处运行(例如执行具有特定名称的方法)。切入点表达式匹配的连接点的概念是 AOP 的核心,Spring 默认使用 AspectJ 切入点表达式语言。

引介 Introduction

在类上声明其他方法或字段。 Spring AOP 允许向任何被增强的对象引入新接口和相应的实现。例如,可以使用 Introduction 使 bean 实现 IsModified 接口,以简化缓存。

目标对象 Target object

由一个或多个切面增强的对象。

代理 AOP proxy

由 AOP 框架创建的一个对象,用于实现切面逻辑如增强方法执行等。在 Spring Framework 中,AOP 代理是 JDK 动态代理或 CGLIB 代理。

织入 Weaving

将切面与其他应用程序类型或对象链接以创建增强对象。这可以在编译时如使用 AspectJ 编译器、加载时或运行时完成。 Spring AOP 与其他纯 Java AOP 框架一样,在运行时执行编织。

结合网上的一张图理解下。

切入点匹配的连接点的概念是 AOP 的关键,这将它与仅提供拦截的旧技术区分开来。切入点使增强Advice的目标独立于面向对象的层次结构。如可以将提供声明性事务管理的环绕通知应用到一组跨越多个对象(例如服务层中的所有业务操作)的方法。

你可能感兴趣的:(java,程序人生,struts,spring,学习)