Spring AOP API
前一章描述了Spring通过@AspectJ和基于模式的切面定义对AOP的支持。在本章中,我们将讨论更低级别的Spring AOP API。对于常见应用程序,我们建议使用前一章中描述的带有AspectJ切入点的Spring AOP。
部分总结
📄️ Spring中的Pointcut API
本节描述了Spring如何处理关键的切点(pointcut)概念。
📄️ Spring中的Advice API
现在我们可以研究Spring AOP是如何处理通知(advice)的。
📄️ Spring中的Advisor API
在Spring中,Advisor(顾问)是一种切面(aspect),它仅包含一个与切入点表达式(pointcut expression)相关联的建议对象(advise object)。
📄️ 使用ProxyFactoryBean创建AOP代理
如果你使用Spring IoC容器(ApplicationContext或BeanFactory)来管理你的业务对象(你确实应该这样做!),那么你就应该使用Spring提供的AOP FactoryBean实现之一。(请记住,factory bean引入了一层间接性,它能够创建不同类型的对象。)
📄️ 简洁的代理定义
特别是在定义事务代理(transactional proxies)时,你可能会得到许多相似的代理定义。使用父级(parent)和子级(child)bean定义,再加上内部bean(inner 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接口中有所体现。该接口负责返回实现连接点(join point)的“目标对象”(target object)。每当AOP代理处理方法调用时,都会要求TargetSource实现提供目标对象的实例。
📄️ 定义新的建议类型
Spring AOP(面向切面编程)被设计为可扩展的。虽然目前内部主要使用拦截实现策略,但除了在方法执行前、抛出异常时以及返回结果后的拦截之外,还可以支持其他类型的切面(advice)。