Spring AOP 切入点与通知的深入解析
1. 引言
在 Spring AOP 中,通知(Advice)和切入点(Pointcut)是两个核心概念。通知定义了在目标方法执行前后要执行的操作,而切入点则决定了通知应该应用到哪些方法上。合理使用切入点可以提高代码的可维护性和性能。
2. Spring 中的通知与切入点
在 Spring 中,之前的示例通常使用 ProxyFactory.addAdvice()
方法来配置代理的通知。实际上,该方法在背后会调用 addAdvisor()
方法,并创建一个 DefaultPointcutAdvisor
实例,默认情况下,这个切入点会应用到目标对象的所有方法上。
在某些情况下,如用于日志记录时,这可能是合适的,但在其他情况下,我们可能希望限制通知应用的方法范围。如果直接在通知中硬编码可接受的方法列表,会带来一些问题:
- 降低可重用性 :硬编码的方法列表会使通知难以在其他场景中复用。
- 性能问题 :每次调用目标对象的方法时都需要进行方法检查,会降低应用程序的性能。
因此,建议尽可能使用切入点来控制通知的应用范围。但在某些情况下,如通知与目标对象紧密耦合时,在通知内部进行检查是必要的,我们将这种耦合称为目标亲和性(target affinity)。
3. 切入点接口
在 Spring 中,切入点是通过实现 Pointcut
接口来创建的,该