1. 介绍
当前有多个可用的AOP库,这些库必须能够回答许多问题:
- 它与我现有的或新的应用程序兼容吗?
- 在哪里可以实施AOP?
- 它与我的应用程序集成的速度有多快?
- 性能开销是多少?
在本文中,我们将着眼于回答这些问题,并介绍Spring AOP和AspectJ(这两种最流行的Java AOP框架)。
2. AOP 概念
在开始之前,让我们对术语和核心概念进行快速的高层次审查:
- 切面–一种标准代码/功能,分散在应用程序的多个位置,通常与实际的业务逻辑(例如,事务管理)不同。每个方面都专注于特定的跨领域功能
- 连接点–这是程序执行过程中的特定点,例如方法执行,构造函数调用或字段分配
- 通知–方面在特定联接点中采取的操作
- 切入点–与联接点匹配的正则表达式。每当任何连接点与切入点匹配时,都会执行与该切入点关联的指定建议
- 编织–将方面与目标对象链接以创建建议对象的过程
3.Spring AOP 和AspectJ
现在,让我们从多个角度讨论Spring AOP和AspectJ,例如功能,目标,编织,内部结构,连接点和简单性
3.1 能力和目标
简而言之,Spring AOP和AspectJ具有不同的目标。 Spring AOP旨在在Spring IoC上提供一个简单的AOP实现,以解决程序员面临的最常见问题。它不打算用作完整的AOP解决方案-只能应用于由Spring容器管理的bean。 另一方面,AspectJ是原始的AOP技术,旨在提供完整的AOP解决方案。它比Spring AOP更强大,但也更复杂。还值得注意的是,AspectJ可以应用于所有域对象。
3.2 编织
AspectJ和Spring AOP都使用不同类型的编织,这会影响它们在性能和易用性方面的行为。 AspectJ使用三种不同的编织方式:
- 编译时编织:AspectJ编译器将方面和应用程序的源代码都