Spring AOP 简析
AOP是Aspect-Oriented Programming(面向方面编程或面向切面)的简称
维基百科对“AOP”相关概念的叙述如下
Aspect是一种新的模块化机制 用来描述分散在对象 类或函数中的横切关注点(crosscutting concern) 从关注点中分离出横切关注点是面向切面的程序设计的核心概念 分离关注点使解决特定领域问题的代码从业务逻辑中独立出来 业务逻辑的代码中不再含有针对特定领域问题代码的调用 业务逻辑同特定领域问题的关系通过切面来封装 维护 这样原本分散在整个应用程序中的变动就可以很好地管理起来
AOP实现浅析图
术语使用
Advice (通知)
定义在连接点做什么 为切面增强提供织入接口 在Spring AOP中 它主要描述Spring AOP围绕方法调用而注入的切面行为 具体的接口定义在org.aopalliance.aop.Advice中 在Spring AOP的实现中 使用了这个统一接口 更具体的通知类型有如BeforeAdvice AfterAdvice ThrowsAdvice
Pointcut(切点)
决定Advice通知应该作用于哪个连接点用来定义需要增强的方法的集合 这些集合的选取可以按照一定的规则来完成 例如可以由某个正则表达式进行标识 或根据某个方法名进行匹配等
Advisor (通知器 )
通过Advisor结合对目标方法的切面增强设计(Advice)和关注点的设计(Pointcut)这个结合为使用IoC容器配置AOP应用
设计原理
动态代理模式
以动态代理技术为基础 设计出了一系列AOP的横切实现 比如前置通知 返回通知 异常通知等 同时 Spring AOP还提供了一系列的Pointcut来匹配切入点 可以使用现有的切入点来设计横切面 也可以扩展相关的Pointcut方法来实现切入需求
代理对象可以通过使用JDK的Proxy来完成 也可以通过第三方的类生成器CGLIB来完成
启动代理对象的拦截器来完成各种横切面的织入 这一系列的织入设计是通过一系列Adapter来实现的 通过一系列Adapter的设计 可以把AOP的横切面设计和Proxy模式有机地结合起来 从而实现在AOP中定义好的各种织入方式
—未完待续