写点什么

Spring 中的 AOP

用户头像
代码狗
关注
发布于: 39 分钟前
Spring中的AOP

Spring 中为什么需要 AOP

AOP 也就是面向切面编程,作为面向对象编程的一种补充。AOP 和 OOP 互为补充,面向切面编程将程序运行过程分解成各个切面。

  1. AOP 首先要处理那些 OOP 不能处理的问题:AOP 专门用于处理系统中分布于各个模块(不同方法)中的交叉关注点的问题,在 JavaEE 应用中,常常通过 AOP 来处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等。

  2. AOP 能减少了大量的代码:对于 JDBC 而言,总有一些繁琐的 try..catch..finally,数据库连接的闭合,还有事务的提交和回滚。通过 Spring AOP,就可以对以上的内容说 NO 了,你只是需要完成这个流程中的一部分,而不需要全部完成,没有数据库资源的闭合,也没有事务的代码,你只需要完成业务逻辑,然后 Spring 将你的业务逻辑通过 AOP 织入到流程中。


AOP 的基本概念


  • 切面(Aspect): 切面用于组织多个 Advice,Advice 放在切面中定义。

  • 连接点(Joinpoint): 程序执行过程中明确的点,如方法的调用,或者异常的抛出。在 Spring AOP 中,连接点总是方法的调用。

  • 增强处理(Advice): AOP 框架在特定的切入点执行的增强处理。处理有 around(环绕增强)、before(前置增强)和 after(后置增强)等类型

  • 切入点(Pointcut): 可以插入增强处理的连接点。当某个连接点满足指定要求时,该连接点将被添加增强处理,该连接点也就变成了切入点。


使用 AspectJ 实现 AOP

AspectJ 是一个基于 Java 语言的 AOP 框架,提供了强大的 AOP 功能,其他很多 AOP 框架都借鉴或采纳其中的一些思想。其主要包括两个部分:

  • 第一部分定义了如何表达、定义 AOP 编程中的语法规范,通过这套语法规范,可以方便地用 AOP 来解决 Java 语言中存在的交叉关注点的问题,

  • 第二部分是工具部分,包括编译、调试工具等。

AOP 实现可分为两类:

  1. 静态 AOP 实现: AOP 框架在编译阶段对程序进行修改,即实现对目标类的增强,生成静态的 AOP 代理类,以 AspectJ 为代表。

  2. 动态 AOP 实现: AOP 框架在运行阶段动态生成 AOP 代理,以实现对目标对象的增强,以 Spring AOP 为代表。

一般来说,静态 AOP 实现具有较好的性能,但需要使用特殊的编译器。动态 AOP 实现是纯 Java 实现,因此无须特殊的编译器,但是通常性能略差。

发布于: 39 分钟前阅读数: 2
用户头像

代码狗

关注

还未添加个人签名 2021.03.23 加入

还未添加个人简介

评论

发布
暂无评论
Spring中的AOP