Aop
概念
aop是一个面向切面编程,通过动态代理实现的
面向切面编程
面向切面编程与面向对象编程是互补关系
面向对象编程是纵向的进行
面向切面编程是在面向对象编程基础上进行横向的加强
代理
替目标对象完成一些不易完成的事情(比如在屎山代码上进行修改)
优势
在不改变源码的情况下对方法进行功能增强
动态代理
JDK代理:基于接口的动态代理技术
cglib代理:基于父类的动态代理技术
AOP的相关概念
作用 | |
---|---|
Target | 代理的目标对象 |
Proxy | 代理 |
Joinpoint | 连接点 |
Pointcut | 切入点 |
Advice | 通知/增强 |
Aspect | 切面 |
Weaving | 织入 |
切点表达式
execution([修饰符] 返回值类型 包名.类名.方法名(参数))
常用的书写格式:
execution(* 包名..(…))
- 访问修饰符可以省略
- 返回值类型、包名、类名、方法名可以使用星号* 代表任意
- 包名与类名之间一个点 . 代表当前包下的类,两个点 … 表示当前包及其子包下的类
- 参数列表可以使用两个点 … 表示任意个数,任意类型的参数列表