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 旨在可扩展。虽然当前内部使用的是拦截实现策略,但除了拦截环绕通知、前置通知、异常通知和后置返回通知之外,还可以支持任意类型的通知。