SSM--AOP 日志
AOP(Aspect Oriented Programming 面向切面编程)
日志:
1、硬编码:不推荐 耦合:(通用逻辑和 专用逻辑)希望不要耦合
2、静态代理: (编码时介入)
定义:创建一个代理对象,包装这个组件。以后业务的执行,从代理开始,不用直接调用组件。
特点:定义期间就指定好了互相代理的关系
优点:同一种类型的所有对象都能代理
缺点:范围太小了 只能负责部分接口代理功能
3、动态代理: (运行期间才决定好代理关系)(拦截器思想:拦截所有)
定义:目标对象在执行期间会被动态拦截,插入指定逻辑
优点:可以代理世间万物
缺点:比较难写
动态代理是 Java 原生支持的
动态代理加日志
动态代理:JDK 动态代理:强制要求,目标对象必须有接口,代理的也只是接口规定的方法
AOP实现步骤
1、导入 AOP 依赖
2、编写切面 Aspec
3、编写通知方法
4、指定切入点表达式
5、测试 AOP 动态织入
@Around:环绕通知,可以控制目标方法是否执行,修改目标方法参数,执行结果等
增强器链:切面中的所有通知方法其实就是增强器,他们被组织成一个链路放在集合中,目标方法真正执行前后会去增强器链中执行需要执行的方法
AOP 底层原理:
1、Spring 会为每个被切面切入的组件创建代理对象
2、代理对象中保存了切面类里面所有通知方法构成的增强器链
3、目标方法执行时,会先去执行增强器链中拿到需要提前执行的方法
通知方法的执行顺序:
1、正常链路:前置通知–>目标方法–>返回通知–>后置通知
2、异常链路:前置通知–>目标方法–>异常通知–>后置通知
JoinPoint :包装了 当前目标方法的所有信息
多切面执行顺序