树若有情时,那得青青如许
前言
面向切面编程(Aspect Orient Programming)
一、切面是什么?
公共的,通用的,重复的功能称为切面。
面向切面编程就是讲切面提取出来,单独开发,在需要调用的方法种通过动态代理的方式经行织入
二、手写AOP框架
业务:图书购买业务
切面:事务(公共部分)
先事务开启,然后图书购买业务实现,然后再事务提交(出错时事务回滚)
2.1version1
业务和切面紧耦合在一起,没有拆分
2.2version2
使用子类代理的方式拆分业务和切面
2.3version3
使用静态代理拆分业务和切面,业务和业务接口已拆分,此时切面紧耦合在业务中
2.4version4
使用静态代理拆分业务和业务接口,切面和切面接口
2.5version5
使用动态代理完成第四个版本的优化
三、Spring支持的AOP的实现
Spring支持AOP的编程,常用的有以下几种:
- Before通知:在目标方法被调用前调用,涉及接口org.springframework.aop.MethodBeforeAdvice
- After通知:在目标方法被调用后调用,涉及接口org.springframework.aop.AfterReturningAdvice
- Throws通知:在目标方法抛出一场时调用,涉及接口org.springframework.aop.ThrowAdvice
- Around通知:拦截对目标对象方法调用,涉及接口org.aopalliance.intercept.MethodInterceptor
总结
可空实现(接口):
目标对象,代理对象…
java设计模式
静态、动态代理
个中细节看spring_006_aop代码