Spring-框架-AOP
AOP:程序运行时,动态的将代码切入到指定类的指定位置去。
面向对象和面向切面的关系:
面向切面思想不是为了取代面向对象编程思想,而是对面向对象编程缺陷的补充。
AOP作用:
用于将横穿业务逻辑中的重复代码和核心业务分离,将分离出横穿代码动态植入到核心业务中,从而进一步增强系统扩展性,降低组件耦合度。
AOP应用:
- Authentication 权限
- Caching 缓存
- Context passing 内容传递
- Error handling 错误处理
- Lazy loading 懒加载
- Debugging 调试
- logging,tracing,profiling and monitoring 记录追踪 优化 校准
- Performance optimization 性能优化
- Persistence 持久化
- Resource pooling 资源池
- Synchronization 同步
- Transactions 事务
AOP实现机制:
AOP通过代理模式实现,Spring的AOP透过JDK动态代理实现。
AOP相关概念:
- 连接点:Join Point,表示需要在程序中插入横切关注点的扩展点,连接点可能是类初始化、方法执行、方法调用、字段调用或者处理异常等等,Spring只支持方法执行连接点,在AOP中表示为“在哪里干”
- 切入点:Pointcut,选择一组相关连接点的模式,即可以认为连接点的集合,Spring支持per15正则表达式和AspectJ切入点模式,Spring默认使用AspectJ语法,在AOP中表示为“在哪里干的集合”
- 通知:Advice,在连接点上执行的行为,通知提供了再AOP需要在其辱点所选择的连接点处进行扩展现有行为的手段,AOP中通知有多重类型。在AOP中通知表示为“干什么”
- 方面/切面:Aspect,横切关注点的模块化,比如上边提到的日志组件。可以认为是通知、引入和切入点的组合。在Spring中可以使用Schema和@AspectJ方式进行组织实现,在AOP中表示为“在哪里干和干什么集合”
- 目标对象:Target Object,需要被植入横切关注点的对象,即该对象是切入点选择的对象,需要被通知的对象,从而也可称为“被通知对象”,忧郁Spring AOP通过代理模式实现,从而这个对象永远是被代理对象,在AOP中表示为“对谁干”
- AOP代理: AOP Proxy,AOP框架使用代理模式创建对象,从而实现在连接点处插入通知(即应用切面),就是通过代理来对目标对象应用切面。在Spring中,AOP代理可以用JDK动态代理或者CGLIB代理实现,从通过拦截器模型应用切面。
- 植入:Weaving,植入是一个过程,是将切面应用到目标对象从而创建出AOP代理对象的过程,植入可以在编译期,类装载期,运行期。
通知类型:
- 前置通知:Before Advice,在连接点之前执行的通知,但是这个通知不能阻止连接点前的执行(除非跑出一个异常)
- 返回后通知:After returning advice,在连接点正常完成后执行的通知。
- 跑出异常后通知:After throwing advice,在方法跑出异常退出时执行的通知
- 后通知:After(finally)advice,当连接点推出的时候执行的通知(不论是正常返回还是异常退出)
- 环绕通知:Around advice,保卫一个连接点的通知。环绕通知可以在方法调用前后完成自定义的行为,他也会选择是否继续执行李恩节点或者直接返回他们自己的返回值或者跑出异常来结束执行。
还没有评论,来说两句吧...