SpringAOP
Spring AOP概念
- AOP(Aspect Oriented Programming)是面向切面编程。就是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
简单说 就是在不改变方法原代码的基础上,对方法进行功能增强
本质上是生成一个新的类,叫做代理类 - AOP对程序的扩展方式采用动态代理的方式。(JDK动态代理和Cglib动态代理两种方式)
Spring动态代理
- JDK的动态代理
- Proxy类
static Object newProxyInstance(ClassLoadwe loader,Class<?>[] interfaces,InvocationHandler h) - 三个参数
- 参数1:ClassLoader loader 类加载期,用来加载代理对象
- 参数2:Class<?>[] interfaces 目标类的字节码对象数组,因为代理的是接口,需要知道接口中所有的方法
- 参数3:InvocationHandler h 执行句柄,代理对象处理的核心逻辑就在该接口中
- Proxy类
- 案例:老总吃饭
老总类
秘书类
案例:日志系统
给一个类的所有方法加log
JDK动态代理注意事项
- 动态代理,必须要有一个接口
- 动态代理的三个参数
代理类,与被代理类 地位是一样的
(相同的ClassLoader,相同的接口)
所以,有相同的接口,相同的类加载器 - invoke方法
参1 一般不用,代理对象
参2 表示要增强哪个方法