Spring-AOP
动态代理
定义
- 可以在程序的执行过程中,创建代理对象。
通过代理对象执行方法,给目标类的方法增加额外的功能(功能增强)
jdk动态代理实现步骤
- 创建目标类,SomeServiceImpl目标类,给它的doSome,doOther增加 输出时间, 事务。
- 创建InvocationHandler接口的实现类,在这个类实现给目标方法增加功能。
- 使用jdk中 类Proxy,创建代理对象。实现创建对象的能力。
动态代理的作用
- 在目标类源代码不改变的情况下,增加功能。
- 减少代码的重复。
- 专注业务逻辑代码。
- 解耦合,让你的业务功能和非业务功能(日志、事务)分离。
AOP
简介
- AOP(Aspect Orient Programming):面向切面编程。面向切面编程是从动态角度考虑程序运行过程。
- AOP底层:就是采用动态代理模式实现的。AOP就是动态代理的规范化(统一方式)。采用了两种代理:JDK的动态代理,与CGLIB的动态代理。
术语
切面-Aspect
- 表示增强的功能,就是一堆代码,完成某一个功能。非业务功能,
常见的切面功能有:日志、事务、统计信息、参数检查、权限验证。
连接点-JoinPoint
- 连接业务方法和切面的位置。就是某类中的业务方法
切入点-Pointcut
- 指多个连接点方法的集合。多个方法
通知-Advice
- 通知表示切面功能执行的时间
目标对象
- 给哪个类的方法增加功能,这个类就是目标对象
通知类型介绍
Before
- 在目标方法被调用之前做增强处理
AfterReturning
- 在目标方法正常完成后做增强处理
AfterThrowing
- 主要用来处理程序中未处理的异常
After
- 在目标方法完成之后做增强,无论目标方法是否成功完成
Around
- 在目标方法完成前后做增强处理
问题
怎么理解面向切面编程?
- 需要在分析项目功能时,找出切面。
- 合理的安排切面的执行时间(是在目标方法前,还是目标方法后)。
- 合理的安排切面的执行位置(在哪个类的哪个方法增加增强功能)。