Spring AOP APIs
上一章描述了 Spring 对 AOP 的支持,包括 @AspectJ 和基于模式的切面定义。在本章中,我们将讨论更底层的 Spring AOP API。对于常见的应用程序,我们建议使用上一章中描述的带有 AspectJ 切入点的 Spring AOP。
章节摘要
📄️ Spring 中的 Pointcut API
本节描述了 Spring 如何处理关键的切点概念。
📄️ 在 Spring 中的建议 API
现在我们可以研究 Spring AOP 如何处理通知。
📄️ Spring 中的 Advisor API
在 Spring 中,Advisor 是一个切面,它仅包含一个与切入点表达式关联的通知对象。
📄️ 使用 ProxyFactoryBean 创建 AOP 代理
如果您使用 Spring IoC 容器(一个 ApplicationContext 或 BeanFactory)来管理您的业务对象(而且您应该这样做!),您会想要使用 Spring 的 AOP FactoryBean 实现之一。(请记住,工厂 bean 引入了一层间接性,让它能够创建不同类型的对象。)
📄️ 简明代理定义
特别是在定义事务代理时,您可能会遇到许多相似的代理定义。使用父 bean 定义和子 bean 定义,以及内部 bean 定义,可以使代理定义更加清晰和简洁。
📄️ 使用 ProxyFactory 程序化创建 AOP 代理
使用 Spring 程序化地创建 AOP 代理非常简单。这使您可以在不依赖 Spring IoC 的情况下使用 Spring AOP。
📄️ 操作建议对象
然而,无论您如何创建 AOP 代理,您都可以通过使用 org.springframework.aop.framework.Advised 接口来操作它们。任何 AOP 代理都可以被转换为此接口,无论它实现了哪些其他接口。此接口包括以下方法:
📄️ 使用“自动代理”功能
到目前为止,我们已经考虑通过使用 ProxyFactoryBean 或类似的工厂 bean 来显式创建 AOP 代理。
📄️ 使用 TargetSource 实现
Spring 提供了一个 TargetSource 的概念,该概念在 org.springframework.aop.TargetSource 接口中表达。这个接口负责返回实现连接点的“目标对象”。每当 AOP 代理处理方法调用时,都会请求 TargetSource 实现获取一个目标实例。
📄️ 定义新的建议类型
Spring AOP 旨在可扩展。虽然当前内部使用的是拦截实现策略,但除了拦截环绕通知、前置通知、异常通知和后置返回通知之外,还可以支持任意类型的通知。