AOP概念:
1. aop面向切面编程, 扩展功能不修改源代码实现
2. aop采取横向抽取机制, 取代了传统的纵向继承体系重复性代码
AOP作用: 在程序运行期间, 不修改源码对已有的方法进行增强
AOP优势:减少重复代码 提高开发效率 维护方便
Spring 能帮我们做的:
需要我们自己做的: 增强的方法必须自己写 在什么执行这些增强的方法 对业务层那些方法进行增强
Spring中AOP: 框架类会根据目标类是否实现了接口来选择不同动态代理技术
AOP中的术语:
Joinpoint 连接点: 是指那些被拦截到的点, 在spring中 这些点指的是方法 因为spring中只支持方法类型的连接点
具体: 业务层接口所有的方法都是连接点 比如ICustomerService中的 findAllCustomer(), saveCustomer()
Pointcut 切入点:指我们要哪些Jointpoint进行拦截定义
具体:被增强的方法就是切入点 没有被增强的方法不是切入点 切入点一定是连接点 连接点不一定是切入点
比如下面代码: 除了test方法 ICustomerService中的其他方法都是切入点
Advice 通知/增强: 指拦截到Joinpoint之后所要做的事情就是通知
通知的类型: 前置通知, 后置通知 异常通知 最终通知 环绕通知
具体:增强方法就是通知 比如TransactionManager中的方法就是通知
Introduction 引介: 一种特殊的通知 在不修改类代码的前提下 Introduction可以在运行期间为类动态的添加一些方法或Field 一般不用
Target 目标对象: 代理的目标对象
Weaving 织入: 把增强应用到目标对象来创建新的代理对象的过程 spring采用动态代理织入 而AspectJ采用编译和类装载织入 一个抽象的概念 也就是增强的代码一开始执行 就是weaving
Proxy 代理:一个类被AOP织入增强后 就产生了一个结果代理类 proxyCs就是代理
Aspect 切面: 是切入点和通知(引介)的结合 就是说明增强的方法在什么时候执行
思考: 如果不使用Spring AOP技术 我们要怎么实现程序运行期间, 不修改源码对已有的方法进行增强